diff --git a/weblate/ar.po b/weblate/ar.po index fef66ba681..feeba7994a 100644 --- a/weblate/ar.po +++ b/weblate/ar.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-05-27 17:34+0000\n" "Last-Translator: Rached Noureddine \n" "Language-Team: Arabic ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3288,109 +3299,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3398,55 +3409,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3454,57 +3465,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3514,17 +3525,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3532,7 +3543,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3540,55 +3551,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "جسيمات" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3596,17 +3607,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3953,7 +3964,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3962,24 +3973,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3988,11 +3999,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4000,7 +4011,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4009,7 +4020,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4017,18 +4028,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4036,7 +4047,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4044,7 +4055,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4052,28 +4063,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4082,32 +4093,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4115,17 +4127,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4133,7 +4145,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4142,11 +4154,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4154,36 +4166,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8710,9 +8722,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12114,8 +12126,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12233,7 +12245,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13288,7 +13300,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13480,28 +13492,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13592,58 +13604,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13703,6 +13663,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13722,6 +13689,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14161,7 +14341,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19133,7 +19313,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19176,7 +19356,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19201,10 +19381,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19283,7 +19463,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19374,7 +19554,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19494,18 +19674,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19513,108 +19693,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19623,261 +19803,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19886,22 +20067,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19909,24 +20090,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19934,11 +20115,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19946,11 +20127,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19958,11 +20139,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19971,7 +20152,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19979,22 +20160,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20002,11 +20183,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20016,79 +20197,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20096,17 +20277,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20115,17 +20296,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20268,7 +20449,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21561,7 +21742,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21669,7 +21850,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22932,303 +23113,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23240,6 +23553,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23386,6 +23700,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23400,6 +23715,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23435,14 +23751,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23721,7 +24040,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23860,8 +24179,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24242,11 +24561,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24276,11 +24596,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24390,9 +24711,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24478,7 +24799,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24486,7 +24807,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24522,8 +24843,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24553,7 +24874,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24589,7 +24911,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24666,7 +24988,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24692,10 +25014,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24718,8 +25040,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24765,7 +25087,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24793,9 +25115,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24810,15 +25132,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24831,7 +25153,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24868,7 +25190,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24889,7 +25211,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24932,9 +25254,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24972,92 +25294,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25067,37 +25389,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25107,32 +25429,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25141,19 +25463,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25161,26 +25483,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25188,7 +25510,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25197,7 +25519,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25206,20 +25528,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25228,66 +25550,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25297,31 +25619,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25331,51 +25653,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25383,23 +25705,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25407,45 +25729,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25453,7 +25775,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25463,51 +25785,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25515,13 +25837,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25529,65 +25851,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25595,7 +25917,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25603,84 +25925,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25689,24 +26011,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25714,56 +26036,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25771,14 +26093,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25786,7 +26108,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25796,49 +26118,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25847,7 +26165,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25856,19 +26174,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25877,47 +26195,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25925,53 +26243,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25981,11 +26299,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25998,57 +26316,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26235,7 +26553,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26248,7 +26566,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26300,8 +26618,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26484,8 +26802,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26630,7 +26947,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26796,7 +27113,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26809,7 +27126,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26824,7 +27141,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26834,8 +27151,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26848,7 +27165,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26933,7 +27250,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26997,30 +27314,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27028,108 +27345,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27137,49 +27454,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27187,27 +27504,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27217,7 +27534,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27226,14 +27543,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27242,32 +27559,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27275,7 +27592,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27285,54 +27602,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27340,38 +27657,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27379,29 +27696,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27410,29 +27727,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27441,13 +27758,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27455,18 +27772,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27474,38 +27791,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27513,38 +27830,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27553,32 +27870,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27586,7 +27903,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27594,13 +27911,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27608,20 +27925,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27630,20 +27947,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27652,70 +27969,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27725,11 +28043,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27737,39 +28055,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27778,67 +28096,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27848,34 +28166,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27883,20 +28201,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28907,6 +29225,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30662,15 +30981,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33501,12 +33837,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35478,8 +35808,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35686,9 +36016,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39385,11 +39715,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39417,7 +39747,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39458,10 +39788,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39518,7 +39848,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39585,7 +39915,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39594,7 +39924,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39605,7 +39935,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39613,7 +39943,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39621,43 +39951,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39666,17 +39996,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39686,7 +40016,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39697,7 +40027,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39709,30 +40039,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39743,7 +40079,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39751,89 +40087,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39892,7 +40336,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40628,10 +41072,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41452,7 +41892,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41677,7 +42117,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41743,9 +42183,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41823,7 +42263,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41966,7 +42406,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42010,7 +42450,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42027,7 +42467,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42162,7 +42602,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42191,8 +42631,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42209,7 +42649,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42218,7 +42658,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42364,12 +42804,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42433,7 +42873,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42450,261 +42890,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44610,6 +45049,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49978,7 +52219,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50023,9 +52264,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50056,17 +52298,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50084,6 +52327,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52643,7 +54938,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52702,15 +54997,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52841,7 +55132,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52915,19 +55206,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52939,15 +55230,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52984,8 +55275,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53065,7 +55356,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53409,7 +55700,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/ca.po b/weblate/ca.po index bce1211dc8..1d429650fb 100644 --- a/weblate/ca.po +++ b/weblate/ca.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-26 03:35+0000\n" "Last-Translator: Roger Blanco Ribera \n" "Language-Team: Catalan ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3446,109 +3457,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3556,55 +3567,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3612,57 +3623,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3672,17 +3683,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3690,7 +3701,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3698,55 +3709,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3754,17 +3765,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4111,7 +4122,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4120,24 +4131,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4146,11 +4157,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4158,7 +4169,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4167,7 +4178,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4175,18 +4186,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4194,7 +4205,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4202,7 +4213,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4210,28 +4221,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4240,32 +4251,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4273,17 +4285,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4291,7 +4303,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4300,11 +4312,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4312,36 +4324,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8869,9 +8881,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12274,8 +12286,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12393,7 +12405,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13448,7 +13460,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13640,28 +13652,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13752,59 +13764,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "No hi ha cap mena de restricció en l'ús del motor Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13864,6 +13823,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13883,6 +13849,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "No hi ha cap mena de restricció en l'ús del motor Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14322,7 +14502,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19294,7 +19474,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19337,7 +19517,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19362,10 +19542,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19444,7 +19624,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19535,7 +19715,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19655,18 +19835,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19674,108 +19854,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19784,261 +19964,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20047,22 +20228,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20070,24 +20251,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20095,11 +20276,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20107,11 +20288,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20119,11 +20300,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20132,7 +20313,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20140,22 +20321,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20163,11 +20344,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20177,79 +20358,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20257,17 +20438,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20276,17 +20457,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20429,7 +20610,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21722,7 +21903,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21830,7 +22011,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23093,303 +23274,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23401,6 +23714,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23547,6 +23861,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23561,6 +23876,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23596,14 +23912,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23882,7 +24201,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24021,8 +24340,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24403,11 +24722,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24437,11 +24757,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24551,9 +24872,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24639,7 +24960,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24647,7 +24968,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24683,8 +25004,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24714,7 +25035,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24750,7 +25072,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24827,7 +25149,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24853,10 +25175,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24879,8 +25201,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24926,7 +25248,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24954,9 +25276,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24971,15 +25293,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24992,7 +25314,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25029,7 +25351,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25050,7 +25372,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25093,9 +25415,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25133,92 +25455,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25228,37 +25550,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25268,32 +25590,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25302,19 +25624,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25322,26 +25644,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25349,7 +25671,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25358,7 +25680,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25367,20 +25689,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25389,66 +25711,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25458,31 +25780,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25492,51 +25814,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25544,23 +25866,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25568,45 +25890,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25614,7 +25936,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25624,51 +25946,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25676,13 +25998,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25690,65 +26012,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25756,7 +26078,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25764,84 +26086,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25850,24 +26172,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25875,56 +26197,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25932,14 +26254,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25947,7 +26269,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25957,49 +26279,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26008,7 +26326,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26017,19 +26335,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26038,47 +26356,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26086,53 +26404,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26142,11 +26460,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26159,57 +26477,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26396,7 +26714,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26409,7 +26727,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26461,8 +26779,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26645,8 +26963,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26791,7 +27108,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26957,7 +27274,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26970,7 +27287,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26985,7 +27302,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26995,8 +27312,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27009,7 +27326,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27094,7 +27411,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27158,30 +27475,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27189,108 +27506,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27298,49 +27615,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27348,27 +27665,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27378,7 +27695,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27387,14 +27704,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27403,32 +27720,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27436,7 +27753,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27446,54 +27763,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27501,38 +27818,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27540,29 +27857,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27571,29 +27888,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27602,13 +27919,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27616,18 +27933,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27635,38 +27952,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27674,38 +27991,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27714,32 +28031,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27747,7 +28064,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27755,13 +28072,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27769,20 +28086,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27791,20 +28108,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27813,70 +28130,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27886,11 +28204,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27898,39 +28216,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27939,67 +28257,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28009,34 +28327,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28044,20 +28362,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29068,6 +29386,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30823,15 +31142,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33662,12 +33998,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35639,8 +35969,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35847,9 +36177,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39546,11 +39876,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39578,7 +39908,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39619,10 +39949,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39679,7 +40009,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39746,7 +40076,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39755,7 +40085,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39766,7 +40096,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39774,7 +40104,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39782,43 +40112,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39827,17 +40157,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39847,7 +40177,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39858,7 +40188,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39870,30 +40200,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39904,7 +40240,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39912,89 +40248,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40053,7 +40497,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40789,10 +41233,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41613,7 +42053,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41838,7 +42278,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41904,9 +42344,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41984,7 +42424,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42127,7 +42567,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42171,7 +42611,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42188,7 +42628,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42323,7 +42763,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42352,8 +42792,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42370,7 +42810,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42379,7 +42819,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42525,12 +42965,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42594,7 +43034,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42611,261 +43051,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44771,6 +45210,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "No hi ha cap mena de restricció en l'ús del motor Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50139,7 +52381,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50184,9 +52426,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50217,17 +52460,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50245,6 +52489,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52804,7 +55100,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52863,15 +55159,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -53002,7 +55294,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53076,19 +55368,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53100,15 +55392,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53145,8 +55437,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53226,7 +55518,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53569,10 +55861,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"A més, també pots fer fer una ullada als diferents `projectes de demostració " +"`_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/cs.po b/weblate/cs.po index 9e999072f5..d4809abe74 100644 --- a/weblate/cs.po +++ b/weblate/cs.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-28 12:35+0000\n" "Last-Translator: Jakub Smetana \n" "Language-Team: Czech ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3257,109 +3268,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3367,55 +3378,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3423,57 +3434,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3483,17 +3494,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3501,7 +3512,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3509,55 +3520,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3565,17 +3576,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3923,7 +3934,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3932,24 +3943,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3958,11 +3969,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3970,7 +3981,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3979,7 +3990,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3987,18 +3998,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4006,7 +4017,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4014,7 +4025,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4022,28 +4033,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4052,32 +4063,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Zdroje" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4085,17 +4098,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4103,7 +4116,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4112,11 +4125,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4124,36 +4137,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8680,9 +8693,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12084,8 +12097,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12203,7 +12216,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13259,7 +13272,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13451,28 +13464,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13563,58 +13576,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13675,6 +13636,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13694,6 +13662,221 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animace" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animace" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animace" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14133,7 +14316,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19105,7 +19288,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19148,7 +19331,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19173,10 +19356,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19255,7 +19438,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19346,7 +19529,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19466,18 +19649,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19485,108 +19668,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19595,261 +19778,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19858,22 +20042,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19881,24 +20065,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19906,11 +20090,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19918,11 +20102,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19930,11 +20114,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19943,7 +20127,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19951,22 +20135,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19974,11 +20158,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19988,79 +20172,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Hloubka" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20068,17 +20252,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20087,17 +20271,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20240,7 +20424,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21533,7 +21717,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21641,7 +21825,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22904,303 +23088,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23212,6 +23528,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23358,6 +23675,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23372,6 +23690,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23407,14 +23726,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23693,7 +24015,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23832,8 +24154,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24214,11 +24536,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24248,11 +24571,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24362,9 +24686,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24450,7 +24774,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24458,7 +24782,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24494,8 +24818,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24525,7 +24849,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24561,7 +24886,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24638,7 +24963,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24664,10 +24989,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24690,8 +25015,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24737,7 +25062,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24765,9 +25090,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24782,15 +25107,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24803,7 +25128,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24840,7 +25165,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24861,7 +25186,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24904,9 +25229,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24944,92 +25269,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25039,37 +25364,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25079,32 +25404,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25113,19 +25438,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25133,26 +25458,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25160,7 +25485,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25169,7 +25494,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25178,20 +25503,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25200,66 +25525,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25269,31 +25594,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25303,51 +25628,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25355,23 +25680,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25379,45 +25704,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25425,7 +25750,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25435,51 +25760,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25487,13 +25812,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25501,65 +25826,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25567,7 +25892,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25575,84 +25900,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25661,24 +25986,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25686,56 +26011,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25743,14 +26068,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25758,7 +26083,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25768,49 +26093,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25819,7 +26140,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25828,19 +26149,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25849,47 +26170,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25897,53 +26218,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25953,11 +26274,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25970,57 +26291,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26207,7 +26528,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26220,7 +26541,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26272,8 +26593,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26456,8 +26777,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26602,7 +26922,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26768,7 +27088,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26781,7 +27101,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26796,7 +27116,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26806,8 +27126,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26820,7 +27140,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26905,7 +27225,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26969,30 +27289,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27000,108 +27320,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27109,49 +27429,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27159,27 +27479,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27189,7 +27509,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27198,14 +27518,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27214,32 +27534,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27247,7 +27567,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27257,54 +27577,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27312,38 +27632,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27351,29 +27671,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27382,29 +27702,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27413,13 +27733,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27427,18 +27747,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27446,38 +27766,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27485,38 +27805,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27525,32 +27845,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27558,7 +27878,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27566,13 +27886,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27580,20 +27900,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27602,20 +27922,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27624,70 +27944,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27697,11 +28018,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27709,39 +28030,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27750,67 +28071,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27820,34 +28141,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27855,20 +28176,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28879,6 +29200,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30634,15 +30956,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33473,12 +33812,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animace" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35450,8 +35783,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35658,9 +35991,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39357,11 +39690,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39389,7 +39722,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39430,10 +39763,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39490,7 +39823,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39557,7 +39890,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39566,7 +39899,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39577,7 +39910,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39585,7 +39918,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39593,43 +39926,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39638,17 +39971,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39658,7 +39991,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39669,7 +40002,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39681,30 +40014,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39715,7 +40054,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39723,89 +40062,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39864,7 +40311,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40600,10 +41047,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41424,7 +41867,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41649,7 +42092,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41715,9 +42158,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41795,7 +42238,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41938,7 +42381,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41982,7 +42425,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -41999,7 +42442,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42134,7 +42577,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42163,8 +42606,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42181,7 +42624,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42190,7 +42633,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42336,12 +42779,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42405,7 +42848,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42422,261 +42865,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44582,6 +45024,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Pluginy" @@ -49950,7 +52194,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -49995,9 +52239,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50028,17 +52273,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50056,6 +52302,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Podmínka" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52617,7 +54916,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52677,15 +54976,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52817,7 +55112,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52891,19 +55186,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52915,15 +55210,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52960,8 +55255,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53043,7 +55338,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53387,7 +55682,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/da.po b/weblate/da.po index 0595aaf701..9c719f3a5e 100644 --- a/weblate/da.po +++ b/weblate/da.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-04-29 15:59+0000\n" "Last-Translator: Christoffer Schindel \n" "Language-Team: Danish ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3387,109 +3398,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3497,55 +3508,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3553,57 +3564,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3613,17 +3624,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3631,7 +3642,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3639,55 +3650,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3695,17 +3706,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4052,7 +4063,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4061,24 +4072,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4087,11 +4098,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4099,7 +4110,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4108,7 +4119,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4116,18 +4127,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4135,7 +4146,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4143,7 +4154,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4151,28 +4162,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4181,32 +4192,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4214,17 +4226,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4232,7 +4244,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4241,11 +4253,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4253,36 +4265,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8810,9 +8822,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12215,8 +12227,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12334,7 +12346,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13389,7 +13401,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13581,28 +13593,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13693,59 +13705,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Der er ingen brugsrestriktioner på Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13805,6 +13764,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13824,6 +13790,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Der er ingen brugsrestriktioner på Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14263,7 +14443,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19235,7 +19415,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19278,7 +19458,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19303,10 +19483,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19385,7 +19565,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19476,7 +19656,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19596,18 +19776,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19615,108 +19795,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19725,261 +19905,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19988,22 +20169,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20011,24 +20192,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20036,11 +20217,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20048,11 +20229,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20060,11 +20241,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20073,7 +20254,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20081,22 +20262,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20104,11 +20285,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20118,79 +20299,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20198,17 +20379,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20217,17 +20398,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20370,7 +20551,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21663,7 +21844,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21771,7 +21952,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23034,303 +23215,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23342,6 +23655,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23488,6 +23802,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23502,6 +23817,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23537,14 +23853,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23823,7 +24142,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23962,8 +24281,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24344,11 +24663,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24378,11 +24698,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24492,9 +24813,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24580,7 +24901,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24588,7 +24909,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24624,8 +24945,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24655,7 +24976,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24691,7 +25013,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24768,7 +25090,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24794,10 +25116,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24820,8 +25142,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24867,7 +25189,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24895,9 +25217,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24912,15 +25234,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24933,7 +25255,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24970,7 +25292,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24991,7 +25313,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25034,9 +25356,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25074,92 +25396,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25169,37 +25491,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25209,32 +25531,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25243,19 +25565,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25263,26 +25585,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25290,7 +25612,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25299,7 +25621,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25308,20 +25630,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25330,66 +25652,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25399,31 +25721,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25433,51 +25755,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25485,23 +25807,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25509,45 +25831,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25555,7 +25877,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25565,51 +25887,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25617,13 +25939,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25631,65 +25953,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25697,7 +26019,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25705,84 +26027,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25791,24 +26113,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25816,56 +26138,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25873,14 +26195,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25888,7 +26210,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25898,49 +26220,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25949,7 +26267,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25958,19 +26276,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25979,47 +26297,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26027,53 +26345,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26083,11 +26401,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26100,57 +26418,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26337,7 +26655,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26350,7 +26668,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26402,8 +26720,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26586,8 +26904,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26732,7 +27049,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26898,7 +27215,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26911,7 +27228,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26926,7 +27243,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26936,8 +27253,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26950,7 +27267,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27035,7 +27352,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27099,30 +27416,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27130,108 +27447,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27239,49 +27556,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27289,27 +27606,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27319,7 +27636,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27328,14 +27645,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27344,32 +27661,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27377,7 +27694,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27387,54 +27704,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27442,38 +27759,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27481,29 +27798,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27512,29 +27829,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27543,13 +27860,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27557,18 +27874,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27576,38 +27893,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27615,38 +27932,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27655,32 +27972,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27688,7 +28005,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27696,13 +28013,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27710,20 +28027,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27732,20 +28049,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27754,70 +28071,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27827,11 +28145,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27839,39 +28157,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27880,67 +28198,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27950,34 +28268,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27985,20 +28303,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29009,6 +29327,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30764,15 +31083,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33603,12 +33939,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35580,8 +35910,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35788,9 +36118,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39487,11 +39817,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39519,7 +39849,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39560,10 +39890,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39620,7 +39950,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39687,7 +40017,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39696,7 +40026,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39707,7 +40037,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39715,7 +40045,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39723,43 +40053,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39768,17 +40098,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39788,7 +40118,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39799,7 +40129,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39811,30 +40141,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39845,7 +40181,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39853,89 +40189,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39994,7 +40438,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40730,10 +41174,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41554,7 +41994,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41779,7 +42219,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41845,9 +42285,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41925,7 +42365,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42068,7 +42508,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42112,7 +42552,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42129,7 +42569,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42264,7 +42704,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42293,8 +42733,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42311,7 +42751,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42320,7 +42760,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42466,12 +42906,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42535,7 +42975,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42552,261 +42992,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44712,6 +45151,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Der er ingen brugsrestriktioner på Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50080,7 +52322,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50125,9 +52367,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50158,17 +52401,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50186,6 +52430,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52745,7 +55041,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52804,15 +55100,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52943,7 +55235,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53017,19 +55309,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53041,15 +55333,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53086,8 +55378,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53167,7 +55459,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53510,10 +55802,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Foruden denne dokumentation kan du evt. tage et kig på de forskellige `Godot " +"demo projects `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/de.po b/weblate/de.po index 2a9af72897..16a7b41241 100644 --- a/weblate/de.po +++ b/weblate/de.po @@ -30,7 +30,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-14 12:38+0000\n" "Last-Translator: R. K. \n" "Language-Team: German ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3904,109 +3915,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4014,55 +4025,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4070,57 +4081,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4130,17 +4141,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4148,7 +4159,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4156,55 +4167,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Partikel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4212,17 +4223,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4569,7 +4580,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4578,24 +4589,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4604,11 +4615,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4616,7 +4627,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4625,7 +4636,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4633,18 +4644,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4652,7 +4663,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4660,7 +4671,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4668,28 +4679,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4698,32 +4709,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Ressourcen" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4731,17 +4744,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4749,7 +4762,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4758,11 +4771,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4770,36 +4783,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -9379,9 +9392,9 @@ msgstr "Schlüsselwort" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -13081,8 +13094,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -13200,7 +13213,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -14258,7 +14271,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -14450,28 +14463,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -14563,59 +14576,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Es gibt keine Nutzungsbeschränkung für Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -14676,6 +14636,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -14695,6 +14662,224 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Es gibt keine Nutzungsbeschränkung für Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "Arrays" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Identifizierer" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animation" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animation" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animation" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -15134,7 +15319,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -20106,7 +20291,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -20149,7 +20334,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -20174,10 +20359,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -20256,7 +20441,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -20347,7 +20532,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -20467,18 +20652,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -20486,108 +20671,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -20596,261 +20781,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20859,22 +21045,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20882,24 +21068,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20907,11 +21093,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20919,11 +21105,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20931,11 +21117,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20944,7 +21130,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20952,22 +21138,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20975,11 +21161,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20989,79 +21175,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Tiefe" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -21069,17 +21255,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -21088,17 +21274,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -21241,7 +21427,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -22534,7 +22720,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -22642,7 +22828,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23905,303 +24091,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -24213,6 +24531,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -24360,6 +24679,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -24374,6 +24694,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -24409,14 +24730,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -24695,7 +25019,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24835,8 +25159,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -25217,11 +25541,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -25251,11 +25576,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -25365,9 +25691,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -25453,7 +25779,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -25461,7 +25787,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -25497,8 +25823,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -25528,7 +25854,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -25564,7 +25891,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -25641,7 +25968,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -25667,10 +25994,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -25693,8 +26020,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -25740,7 +26067,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -25768,9 +26095,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -25785,15 +26112,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -25806,7 +26133,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25843,7 +26170,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25864,7 +26191,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25907,9 +26234,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25947,92 +26274,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -26042,37 +26369,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -26082,32 +26409,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -26116,19 +26443,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -26136,26 +26463,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -26163,7 +26490,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -26172,7 +26499,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -26181,20 +26508,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -26203,66 +26530,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -26272,31 +26599,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -26306,51 +26633,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -26358,23 +26685,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -26382,45 +26709,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -26428,7 +26755,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -26438,51 +26765,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -26490,13 +26817,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -26504,65 +26831,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -26570,7 +26897,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -26578,84 +26905,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -26664,24 +26991,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -26689,56 +27016,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -26746,14 +27073,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -26761,7 +27088,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -26771,49 +27098,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26822,7 +27145,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26831,19 +27154,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26852,47 +27175,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26900,53 +27223,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26956,11 +27279,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26973,57 +27296,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -27210,7 +27533,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -27223,7 +27546,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -27275,8 +27598,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -27459,8 +27782,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -27605,7 +27927,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -27771,7 +28093,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -27784,7 +28106,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -27799,7 +28121,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -27809,8 +28131,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27823,7 +28145,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27908,7 +28230,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27972,30 +28294,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -28003,108 +28325,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -28112,49 +28434,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -28162,27 +28484,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -28192,7 +28514,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -28201,14 +28523,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -28217,32 +28539,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -28250,7 +28572,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -28260,54 +28582,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -28315,38 +28637,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -28354,29 +28676,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -28385,29 +28707,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -28416,13 +28738,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -28430,18 +28752,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -28449,38 +28771,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -28488,38 +28810,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -28528,32 +28850,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -28561,7 +28883,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -28569,13 +28891,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -28583,20 +28905,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -28605,20 +28927,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -28627,70 +28949,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -28700,11 +29023,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -28712,39 +29035,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -28753,67 +29076,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28823,34 +29146,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28858,20 +29181,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29882,6 +30205,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -31639,15 +31963,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -34478,12 +34819,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animation" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -36455,8 +36790,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -36663,9 +36998,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -40364,11 +40699,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -40396,7 +40731,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -40439,10 +40774,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -40499,7 +40834,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -40566,7 +40901,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -40575,7 +40910,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -40586,7 +40921,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -40594,7 +40929,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -40602,43 +40937,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -40647,17 +40982,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -40667,7 +41002,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -40678,7 +41013,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -40690,30 +41025,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -40724,7 +41065,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -40732,89 +41073,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40873,7 +41322,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -41609,10 +42058,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -42433,7 +42878,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -42658,7 +43103,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -42724,9 +43169,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -42804,7 +43249,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42947,7 +43392,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42991,7 +43436,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -43008,7 +43453,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -43143,7 +43588,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -43172,8 +43617,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -43190,7 +43635,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -43199,7 +43644,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -43345,12 +43790,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -43414,7 +43859,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -43431,261 +43876,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -45591,6 +46035,1813 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Scripting" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Es gibt keine Nutzungsbeschränkung für Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Abstand" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Abstand" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Projekt importieren" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Erweiterungen" @@ -50960,7 +53211,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -51005,9 +53256,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -51038,17 +53290,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -51067,6 +53320,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Bedingung" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -53638,7 +55944,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -53698,15 +56004,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -53838,7 +56140,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53914,19 +56216,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53938,15 +56240,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53983,8 +56285,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -54067,7 +56369,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -54410,10 +56712,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Zusätzlich zu dieser Dokumentation möchtest du vielleicht auch einen Blick " +"auf die verschieden `Godot Demoprojekte `_ werfen." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" @@ -56836,10 +59142,6 @@ msgstr "" #~ msgstr "" #~ "Wenn der Elternkonstruktor Argumente benötigt, werden sie so übergeben:" -#, fuzzy -#~ msgid "Adding AI" -#~ msgstr "Abstand" - #~ msgid "**Never!**" #~ msgstr "**Niemals!**" diff --git a/weblate/el.po b/weblate/el.po index 1c64fe31b9..b1c828b2c0 100644 --- a/weblate/el.po +++ b/weblate/el.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-05-06 16:37+0000\n" "Last-Translator: George Tsiamasiotis \n" "Language-Team: Greek ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3513,109 +3524,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3623,55 +3634,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3679,57 +3690,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3739,17 +3750,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3757,7 +3768,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3765,55 +3776,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Σωματίδια" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3821,17 +3832,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4179,7 +4190,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4188,24 +4199,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4214,11 +4225,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4226,7 +4237,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4235,7 +4246,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4243,18 +4254,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4262,7 +4273,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4270,7 +4281,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4278,28 +4289,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4308,32 +4319,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Πόροι" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4341,17 +4354,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4359,7 +4372,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4368,11 +4381,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4380,36 +4393,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8936,9 +8949,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12344,8 +12357,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12463,7 +12476,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13518,7 +13531,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13710,28 +13723,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13822,59 +13835,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Δεν υπάρχουν περιορισμοί χρήσης στην Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13935,6 +13895,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13954,6 +13921,222 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Δεν υπάρχουν περιορισμοί χρήσης στην Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Κίνηση" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Κίνηση" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Κίνηση" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14393,7 +14576,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19365,7 +19548,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19408,7 +19591,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19433,10 +19616,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19515,7 +19698,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19606,7 +19789,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19726,18 +19909,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19745,108 +19928,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19855,261 +20038,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20118,22 +20302,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20141,24 +20325,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20166,11 +20350,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20178,11 +20362,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20190,11 +20374,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20203,7 +20387,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20211,22 +20395,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20234,11 +20418,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20248,79 +20432,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Βάθος" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20328,17 +20512,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20347,17 +20531,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20500,7 +20684,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21793,7 +21977,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21901,7 +22085,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23164,303 +23348,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23472,6 +23788,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23618,6 +23935,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23632,6 +23950,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23667,14 +23986,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23953,7 +24275,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24092,8 +24414,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24474,11 +24796,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24508,11 +24831,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24622,9 +24946,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24710,7 +25034,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24718,7 +25042,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24754,8 +25078,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24785,7 +25109,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24821,7 +25146,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24898,7 +25223,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24924,10 +25249,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24950,8 +25275,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24997,7 +25322,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -25025,9 +25350,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -25042,15 +25367,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -25063,7 +25388,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25100,7 +25425,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25121,7 +25446,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25164,9 +25489,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25204,92 +25529,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25299,37 +25624,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25339,32 +25664,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25373,19 +25698,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25393,26 +25718,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25420,7 +25745,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25429,7 +25754,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25438,20 +25763,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25460,66 +25785,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25529,31 +25854,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25563,51 +25888,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25615,23 +25940,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25639,45 +25964,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25685,7 +26010,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25695,51 +26020,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25747,13 +26072,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25761,65 +26086,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25827,7 +26152,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25835,84 +26160,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25921,24 +26246,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25946,56 +26271,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -26003,14 +26328,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -26018,7 +26343,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -26028,49 +26353,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26079,7 +26400,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26088,19 +26409,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26109,47 +26430,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26157,53 +26478,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26213,11 +26534,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26230,57 +26551,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26467,7 +26788,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26480,7 +26801,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26532,8 +26853,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26716,8 +27037,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26862,7 +27182,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -27028,7 +27348,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -27041,7 +27361,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -27056,7 +27376,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -27066,8 +27386,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27080,7 +27400,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27165,7 +27485,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27229,30 +27549,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27260,108 +27580,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27369,49 +27689,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27419,27 +27739,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27449,7 +27769,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27458,14 +27778,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27474,32 +27794,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27507,7 +27827,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27517,54 +27837,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27572,38 +27892,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27611,29 +27931,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27642,29 +27962,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27673,13 +27993,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27687,18 +28007,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27706,38 +28026,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27745,38 +28065,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27785,32 +28105,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27818,7 +28138,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27826,13 +28146,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27840,20 +28160,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27862,20 +28182,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27884,70 +28204,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27957,11 +28278,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27969,39 +28290,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -28010,67 +28331,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28080,34 +28401,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28115,20 +28436,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29139,6 +29460,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30894,15 +31216,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33733,12 +34072,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Κίνηση" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35710,8 +36043,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35918,9 +36251,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39617,11 +39950,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39649,7 +39982,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39690,10 +40023,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39750,7 +40083,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39817,7 +40150,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39826,7 +40159,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39837,7 +40170,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39845,7 +40178,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39853,43 +40186,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39898,17 +40231,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39918,7 +40251,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39929,7 +40262,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39941,30 +40274,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39975,7 +40314,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39983,89 +40322,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40124,7 +40571,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40860,10 +41307,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41684,7 +42127,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41909,7 +42352,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41975,9 +42418,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -42055,7 +42498,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42198,7 +42641,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42242,7 +42685,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42259,7 +42702,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42394,7 +42837,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42423,8 +42866,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42441,7 +42884,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42450,7 +42893,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42596,12 +43039,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42665,7 +43108,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42682,261 +43125,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44842,6 +45284,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Δεν υπάρχουν περιορισμοί χρήσης στην Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Πρόσθετα" @@ -50210,7 +52455,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50255,9 +52500,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50288,17 +52534,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50316,6 +52563,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Συνθήκη" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52877,7 +55177,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52937,15 +55237,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -53077,7 +55373,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53151,19 +55447,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53175,15 +55471,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53220,8 +55516,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53304,7 +55600,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53647,10 +55943,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Πέραν από την τεκμηρίωση μπορεί να θέλετε να ρίξετε μια ματιά στα διάφορα " +"`Έργα επίδειξης της Godot `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/es.po b/weblate/es.po index 377a5fb00b..7010b82ed6 100644 --- a/weblate/es.po +++ b/weblate/es.po @@ -44,7 +44,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-17 15:42+0000\n" "Last-Translator: Javier Ocampos \n" "Language-Team: Spanish ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " @@ -4361,23 +4373,23 @@ msgstr "" "que mostrará no estará cubierta por ningún elemento como el jugador o los " "enemigos." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "El HUD mostrará la siguiente información:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "Puntuación, cambiado por ``ScoreTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "Un mensaje como \"Game Over\" o \"Get Ready!\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "Un botón \"Start\" para comenzar el juego." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -4387,27 +4399,27 @@ msgstr "" "crear nuestra UI, usaremos dos tipos de nodos :ref:`Control " "`: :ref:`Label ` y :ref:`Button `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "Cree los siguientes hijos del nodo ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr ":ref:`Label ` llamado ``ScoreLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr ":ref:`Label ` llamado ``MessageLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr ":ref:`Button ` llamado ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr ":ref:`Timer ` llamado ``MessageTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -4423,7 +4435,7 @@ msgstr "" "Representan la distancia del borde al ancla del nodo Control. Para más " "detalles, ver :ref:`doc_design_interfaces_with_the_control_nodes`." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" @@ -4431,7 +4443,7 @@ msgstr "" "Acomoda los nodos como se muestra debajo. Cliquea en el botón \"Disposición" "\" para configurar el anclaje del nodo Control:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" @@ -4439,97 +4451,97 @@ msgstr "" "Puedes arrastrar y ubicarlos manualmente o, para un modo más preciso, usa la " "siguiente configuración:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "ScoreLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "``Disposición``: \"Centro Arriba\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "``Margin``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "Left: ``-25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "Top: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "Right: ``25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "Bottom: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "Text: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "MessageLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "``Disposición``: \"Centro\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "Izquierda: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "Top: ``-150``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "Right: ``200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "Bottom: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "Text: ``Dodge the Creeps!``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "StartButton" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "``Disposición``: \"Centro Abajo\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "Left: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "Top: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "Right: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "Bottom: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "Text: ``Start``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4541,11 +4553,11 @@ msgstr "" "Regular.ttf\". Para usar esta fuente, haz lo siguiente en los tres nodos " "``Control``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "Dentro de \"Custom Fonts\", seleccionar \"New DynamicFont\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " @@ -4556,18 +4568,18 @@ msgstr "" "cambiar el ``Size`` (tamaño) de la fuente. Un valor de ``64`` funcionará " "bien." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "Ahora agrega este script a ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" "La señal ``start_game`` dirá al nodo ``Main`` que se ha presionado un botón." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " @@ -4577,7 +4589,7 @@ msgstr "" "como \"Get Ready\". En el ``MessageTimer``, ajustar el ``Wait Time`` en " "``2`` y la propiedad ``One Shot`` en \"Activado\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." @@ -4586,11 +4598,11 @@ msgstr "" "\" durante 2 segundos, luego volverá a la pantalla de título y mostrará el " "botón \"Start\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "Esta función se llamará en ``Main`` cuando el puntaje cambie." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." @@ -4598,11 +4610,11 @@ msgstr "" "Conecta la señal ``timeout()`` del ``MessageTimer`` y la señal ``pressed()`` " "de ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "Conectando HUD a Main" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4614,7 +4626,7 @@ msgstr "" "``Player``, y colócala al final del árbol. El árbol completo debería verse " "así, así que asegúrate de que no falta nada:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" @@ -4622,7 +4634,7 @@ msgstr "" "Ahora conectaremos la funcionalidad de ``HUD`` a nuestro script ``Main``. " "Esto requiere unas pocas adiciones a la escena ``Main``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." @@ -4630,20 +4642,20 @@ msgstr "" "En el panel Node conecta la señal ``start_game`` de HUD a la función " "``new_game()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" "En``new_game()``, actualiza la puntuación y muestra el mensaje \"Get Ready\":" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" "En ``game_over()`` necesitaremos llamar la función correspondiente en " "``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" @@ -4651,7 +4663,7 @@ msgstr "" "Finalmente, agregua ``_on_ScoreTimer_timeout()`` para mantener la interfaz " "en sincronía al cambiar la puntuación:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." @@ -4659,11 +4671,11 @@ msgstr "" "Ahora está listo para jugar. Haga click en el botón \"Reproducir\". Deberás " "seleccionar una escena principal, selecciona ``Main.tscn``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "Finalizando" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " @@ -4673,12 +4685,12 @@ msgstr "" "están los pasos restantes para agregar más \"jugo\" y mejorar la experiencia " "de juego. Eres libre de expandir el juego con sus propias ideas." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "Imagen de fondo" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4693,7 +4705,7 @@ msgstr "" "``ColorRect`` tiene una sola propiedad: ``Color``. Escoge el color que " "quieras y arrastra el borde del ``ColorRect`` para que cubra la pantalla." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." @@ -4701,11 +4713,11 @@ msgstr "" "También puedes agregar una imagen de fondo, si tienes una, utilizando un " "nodo ``Sprite``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "Efectos de sonido" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4717,7 +4729,7 @@ msgstr "" "sonido: \"House In a Forest Loop.ogg\" para música de fondo y \"gameover.wav" "\" para cuando el jugador pierde." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4729,7 +4741,7 @@ msgstr "" "uno, haz click en la propiedad ``Stream``, selecciona \"Load\" y escoge el " "archivo de audio correspondiente." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." @@ -4737,17 +4749,17 @@ msgstr "" "Para reproducir la música, agregua ``$Music.play()`` en la función " "``new_game()`` y ``$Music.stop()`` en ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" "Finalmente, agregua ``$DeathSound.play()`` en la función ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Partículas" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " @@ -4757,7 +4769,7 @@ msgstr "" "al movimiento del jugador. Selecciona la escena ``Player`` y añade un nodo :" "ref:`Particles2D `, nómbralo ``Trail``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " @@ -4767,7 +4779,7 @@ msgstr "" "Tómate la libertad de experimentar y crear diferentes efectos. Para el " "efecto de este ejemplo, usaremos la siguiente configuración:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" @@ -4775,7 +4787,7 @@ msgstr "" "Deberás crear un ``Material`` haciendo click en ```` y luego en " "\"Nuevo ParticlesMaterial\". La configuración es la que se muestra debajo:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " @@ -4785,7 +4797,7 @@ msgstr "" "tomando el alfa (transparencia) del sprite desde 0.5 (semi transparente) a " "0.0 (completamente transparente)." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" @@ -4793,7 +4805,7 @@ msgstr "" "Haz click en \"Nuevo GradientTexture\", luego, dentro de \"Gradient\", " "seleccione \"Nuevo Gradient\". Verás una ventana como esta:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4805,7 +4817,7 @@ msgstr "" "seleccionar el color. Para el primer color, ajusta el valor ``A`` (alfa) a " "la mitad. Para el segundo, llévalo a ``0``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." @@ -4813,11 +4825,11 @@ msgstr "" "Mira :ref:`Particles2D ` para más detalles sobre el uso " "de efectos de partículas." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "Archivos de Proyecto" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -5301,7 +5313,7 @@ msgstr "" "diferentes modos de construir la estructura de los juegos. Todo esto surge " "de las respectivas filosofías de diseño." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -5315,7 +5327,7 @@ msgstr "" "motor es bueno para tu proyecto, deberás probarlo por tí mismo y comprender " "su diseño y limitaciones." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." @@ -5325,11 +5337,11 @@ msgstr "" "en``) si estás buscando un " "resumen de las características del motor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "Diseño orientado a objetos y composición" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " @@ -5340,7 +5352,7 @@ msgstr "" "patrones de programación estrictos para ofrecer un modo intuitivo de " "estructurar su juego." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -5354,11 +5366,11 @@ msgstr "" "de la LuzIntermitente, graba y todas las LamparaRota en la ciudad se " "actualizarán instantáneamente." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "Además, puede **heredar** desde cualquier escena." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -5370,7 +5382,7 @@ msgstr "" "clase en código puro, excepto que eres libre de diseñarla usando el editor, " "utilizando sólo código o una mezcla de las dos." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -5384,7 +5396,7 @@ msgstr "" "actualizará. Esto ayuda a construir proyectos así las estructuras se ajustan " "al diseño del juego." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -5397,7 +5409,7 @@ msgstr "" "motor posee componentes como las figuras de colisión, esos son la excepción, " "no la regla." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " @@ -5408,11 +5420,11 @@ msgstr "" "habilidad de dibujar figuras personalizadas o utilizar un shader " "personalizado." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "Paquete con todo incluído" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -5425,7 +5437,7 @@ msgstr "" "perfilador, la habilidad de recargar localmente y en dispositivos remotos, " "etc." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -5437,7 +5449,7 @@ msgstr "" "siempre que haya un plugin de importación para este. O puedes crear uno como " "el `Tiled Map Importer `__." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -5449,10 +5461,11 @@ msgstr "" "necesidades de los desarrolladores y diseñadores de videojuegos, y están " "fuertemente integrados al motor y el editor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 +#, fuzzy msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" "GDscript permite escribir código sencillo usando una sintaxis similar a " @@ -5460,7 +5473,7 @@ msgstr "" "poseen los lenguajes estáticos. Está también optimizado para código de " "juegos con tipos preestablecidos como vectores y colores." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " @@ -5470,7 +5483,7 @@ msgstr "" "lenguajes compilados como C, C++, Rust o Python (usando el compilador " "Cython) sin recompilar el motor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " @@ -5480,7 +5493,7 @@ msgstr "" "al editor. Puedes arrastrar y soltar nodos o recursos dentro del grafo para " "crear nuevos bloques de código.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -5494,42 +5507,47 @@ msgstr "" "funcionalidad del editor usando código de juegos. Ver `The Godot editor is a " "Godot game`_ debajo." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#, fuzzy msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" "*Un plugin editor de Máquina de Estados en Godot 2, por kubecz3k. te permite " "manejar estados y transiciones visualmente*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "Código abierto" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#, fuzzy msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" "Godot ofrece un código base completamente abierto bajo la **licencia MIT**. " "Esto significa que todas las tecnologías que vienen con este deben ser " "también Libres (no sólo gratis). La mayor parte del código está creado por " "los que contribuyen." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#, fuzzy msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" "Cualquiera puede asociar herramientas propietarias para las necesidades de " "su proyecto - pero no se distribuirán con el motor. Esto incluye NVIDIA " "PhysX, Google Admob, o un importador de FBX. En cualquier caso, pueden ir " "como plugins de terceros." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -5541,7 +5559,7 @@ msgstr "" "ya que Godot imprimirá errores con un volcado de pila, aún si vienen del " "propio motor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." @@ -5549,11 +5567,11 @@ msgstr "" "Esto **no afecta el modo en que trabajes con Godot** de ningún modo: no hay " "\"ataduras\" al motor o a ninguna cosa que hagas con este." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "Dirigido por la comunidad" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -5566,7 +5584,7 @@ msgstr "" "característias creadas por los desarrolladores principales normalmente se " "enfocan en beneficios para la mayoría primero." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -5580,11 +5598,11 @@ msgstr "" "podrían necesitar ellos mismos, así que verás mejoras en todos los rincones " "del motor al mismo tiempo en cada versión mayor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "El editor de Godot es un juego de Godot" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -5597,7 +5615,7 @@ msgstr "" "significa que puedes **usar el mismo código** y las mismas escenas para tus " "juegos, o **construir plugins y extender el editor.**" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." @@ -5606,9 +5624,10 @@ msgstr "" "mismo. Con la palabra clave ``tool``, puedes ejecutar código de juego en el " "editor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 +#, fuzzy msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" @@ -5616,9 +5635,10 @@ msgstr "" "las herramientas de interfaz de Godot para su sistema de programación basado " "en nodos y para el resto de la interfaz.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 +#, fuzzy msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." @@ -5628,15 +5648,16 @@ msgstr "" "plugins como editores de niveles personalizados, o crear scripts con los " "mismos nodos y API usada para los proyectos." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "Motores 2D y 3D separados" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 +#, fuzzy msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" "Godot ofrece motores de rendering 2D y 3D dedicados. Como resultado **la " @@ -11911,9 +11932,9 @@ msgstr "Palabras clave" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -16168,8 +16189,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "Funciones propias" @@ -16311,10 +16332,11 @@ msgstr "" "acaso." #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:474 +#, fuzzy msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -17647,9 +17669,10 @@ msgid "Within single line initializer braces." msgstr "inicialización de llaves de una sola línea." #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 +#, fuzzy msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" "El siguiente ejemplo muestra un uso adecuado de los espacios, de acuerdo con " "algunas de las convenciones antes mencionadas:" @@ -17900,11 +17923,11 @@ msgstr "Exportador de Godot-Blender" msgid "Details on exporting" msgstr "Detalles sobre exportar" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "Deshabilitar objetos específicos" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " @@ -17914,7 +17937,7 @@ msgstr "" "alta resolución utilizados para baking). Un objeto no se exportará si no se " "renderiza en la escena. Esto se puede establecer en el esquema:" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." @@ -17922,11 +17945,11 @@ msgstr "" "Los objetos ocultos en el viewport se exportarán, pero se ocultarán en la " "escena de Godot." -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "Integración de la Construcción de Pipeline" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -18055,75 +18078,6 @@ msgstr "" "\"Blender Render\". Cuando se libere Blender 2.8, se eliminará y esta parte " "del exportador cambiará." -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "Luces" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" -"Por defecto, las lámparas de Blender tienen habilitadas las sombras. Esto " -"puede causar problemas de rendimiento en Godot." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" -"Las lámparas se exportan utilizando su configuración de \"Blender Render\". " -"Cuando se libere Blender 2.8, se eliminará y esta parte del exportador " -"cambiará." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" -"Las lámparas de sol, punto y foco son todas exportadas de Blender junto con " -"muchas de sus propiedades:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "Hay algunas cosas a tener en cuenta:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" -"En Blender, una luz proyecta luz hasta el infinito. En Godot, está sujeta " -"por la distancia de atenuación. Para que la coincidencia entre el viewport y " -"Godot sea lo más cercana posible, activa la casilla de verificación \"Sphere" -"\". (Resaltado en verde)" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" -"Los modelos de atenuación de luz difieren entre Godot y Blender. El " -"exportador intenta hacerlos coincidir, aunque no siempre resulta " -"satisfactorio." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" -"Los modelos de atenuación angular de los focos también difieren entre Godot " -"y Blender. El exportador intenta hacerlos similares, pero no siempre se ven " -"iguales." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "No hay diferencia entre buffer shadow y ray shadow en la exportación." - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "Propiedades Físicas" @@ -18203,6 +18157,13 @@ msgstr "" "colisión del objeto exportado es igual a su grupo de colisión. En la mayoría " "de los casos, esto era lo que buscabas." +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "Sólo Geometría de Colisión" @@ -18230,6 +18191,242 @@ msgstr "" "muestre transparente cuando se trabaja con los modelos, para que esto " "funcione correctamente." +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "Luces" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" +"Por defecto, las lámparas de Blender tienen habilitadas las sombras. Esto " +"puede causar problemas de rendimiento en Godot." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" +"Las lámparas se exportan utilizando su configuración de \"Blender Render\". " +"Cuando se libere Blender 2.8, se eliminará y esta parte del exportador " +"cambiará." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" +"Las lámparas de sol, punto y foco son todas exportadas de Blender junto con " +"muchas de sus propiedades:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "Hay algunas cosas a tener en cuenta:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" +"En Blender, una luz proyecta luz hasta el infinito. En Godot, está sujeta " +"por la distancia de atenuación. Para que la coincidencia entre el viewport y " +"Godot sea lo más cercana posible, activa la casilla de verificación \"Sphere" +"\". (Resaltado en verde)" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" +"Los modelos de atenuación de luz difieren entre Godot y Blender. El " +"exportador intenta hacerlos coincidir, aunque no siempre resulta " +"satisfactorio." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" +"Los modelos de atenuación angular de los focos también difieren entre Godot " +"y Blender. El exportador intenta hacerlos similares, pero no siempre se ven " +"iguales." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "No hay diferencia entre buffer shadow y ray shadow en la exportación." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "Modelos" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Identificadores" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "Skeleton" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animación" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animación del Sprite" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +#, fuzzy +msgid "Action Lib" +msgstr "Action" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "AnimationPlayer" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +#, fuzzy +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "Añade el código siguiente a ``AnimationPlayer_Manager.gd``:" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "Flujo de trabajo de los Assets" @@ -18783,8 +18980,9 @@ msgid "Process" msgstr "Procesos" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 +#, fuzzy msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" "Se pueden aplicar algunos procesos especiales a las imágenes cuando se " "importan como textura." @@ -25292,11 +25490,12 @@ msgstr "" "prácticos de esto son:" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:13 +#, fuzzy msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" "Renderizar objetos eficientemente en grandes cantidades es fácil, pero " @@ -25365,7 +25564,7 @@ msgstr "" "máximo rendimiento de Godot." #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "Renderización" @@ -25397,11 +25596,12 @@ msgstr "" "prioridades de Godot serán así:" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 +#, fuzzy msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" "**Reutilización de Materiales**: Cuanto menor sea la cantidad de materiales " "diferentes en la escena, más rápido será el renderizado. Si una escena tiene " @@ -25512,13 +25712,14 @@ msgstr "" "el consumo de energía)." #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:106 +#, fuzzy msgid "" "On mobile, pulling more power is not an option, so a technique called \"Tile " "Based Rendering\" is used (almost every mobile hardware uses a variant of " "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" "En dispositivos móviles, no es posible extraer más energía, por lo que se " @@ -25650,8 +25851,9 @@ msgid "Level of detail (LOD)" msgstr "Nivel de detalle (LOD)" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 +#, fuzzy msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -25814,11 +26016,11 @@ msgstr "" "ignorar el resto. Al activar esta opción, se eliminarán todas las sombras y " "se mostrará el color puro, sin iluminación." -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "Vertex Lighting (Iluminación de vértices)" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " @@ -25828,7 +26030,7 @@ msgstr "" "de profundidad). Todos los cálculos de iluminación se realizan ejecutando el " "shader de iluminación en cada píxel." -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -25840,7 +26042,7 @@ msgstr "" "capas de transparencia (común en los sistemas de partículas). Cambiar a " "iluminación por vértice puede ayudar en estos casos." -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." @@ -25848,7 +26050,7 @@ msgstr "" "Además, en dispositivos móviles o de gama baja, el cambio a vertex lighting " "puede aumentar considerablemente el rendimiento del renderizado." -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." @@ -25857,11 +26059,11 @@ msgstr "" "directional lighting (iluminación direccional) puede producir sombras (por " "razones de rendimiento)." -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "Sin prueba de profundidad" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " @@ -25871,7 +26073,7 @@ msgstr "" "una prueba de profundidad. Deshabilitarlo tiene como resultado que los " "objetos aparezcan por encima (o por debajo) de todo lo demás." -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " @@ -25881,11 +26083,11 @@ msgstr "" "mundo, y funciona muy bien con la propiedad \"render priority\" de Material " "(ver abajo)." -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "Usar Point Size (Tamaño de punto)" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " @@ -25896,11 +26098,11 @@ msgstr "" "DCCs 3D). Si es así, entonces los puntos pueden ser dimensionados (ver " "abajo)." -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "World Triplanar (Mundo Triplanar)" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " @@ -25910,11 +26112,11 @@ msgstr "" "el triplanar se calcula en el espacio local del objeto. Esta opción hace que " "los triplanares trabajen en el espacio del mundo." -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "Fixed Size (Tamaño fijo)" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " @@ -25925,11 +26127,11 @@ msgstr "" "prueba de profundidad y alta prioridad de renderizado) y algunos tipos de " "anuncios publicitarios." -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "Do Not Receive Shadows (No recibir sombras)" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." @@ -25937,11 +26139,11 @@ msgstr "" "Hace que el objeto no reciba ningún tipo de sombra que de otro modo sería " "proyectada sobre él." -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "Vertex Color (Color de vértice)" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." @@ -25950,19 +26152,19 @@ msgstr "" "vértices que provienen de su aplicación de modelado 3D. Por defecto, se " "ignoran." -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "Use as Albedo (Usar como Albedo)" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "El color del vértice se utiliza como color del albedo." -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "Is SRGB (Es SRGB)" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." @@ -25971,7 +26173,7 @@ msgstr "" "vértices como SRGB, por lo que activar esta opción ayudará a que se vean " "correctamente." -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -25980,7 +26182,7 @@ msgstr "" msgid "Parameters" msgstr "Parámetros" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" @@ -25988,11 +26190,11 @@ msgstr "" "SpatialMaterial también tiene varios parámetros que pueden configurarse para " "ajustar muchos aspectos del renderizado:" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "Diffuse Mode (Modo difuso)" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" @@ -26001,7 +26203,7 @@ msgstr "" "golpear el objeto. El predeterminado es Burley. También hay otros modos " "disponibles:" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." @@ -26009,11 +26211,11 @@ msgstr "" "**Burley:** Modo predeterminado, el algoritmo difuso original de Disney " "Principled PBS." -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "**Lambert:** No se ve afectado por la rugosidad." -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " @@ -26023,7 +26225,7 @@ msgstr "" "rugosidad es mayor. Funciona muy bien para el cabello y simula la dispersión " "a bajo costo de la superficie. Esta implementación es para conservar energía." -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." @@ -26032,19 +26234,18 @@ msgstr "" "microsurfacing (a través de la rugosidad). Funciona bien con materiales " "similares a la arcilla y algunos tipos de tela." -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -"**Toon:** Proporciona un corte duro para la iluminación, con suavizado " -"afectado por la rugosidad." -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "Specular Mode (Modo Specular)" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." @@ -26052,12 +26253,12 @@ msgstr "" "Especifica cómo se renderizará el specular blob. El specular blob representa " "la forma de una fuente de luz reflejada en el objeto." -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" "**ShlickGGX:**El blob más común usado por los motores PBR 3D hoy en día." -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." @@ -26065,27 +26266,27 @@ msgstr "" "**Blinn:** Común en motores de generaciones anteriores. No vale la pena " "usarlo hoy en día, pero lo hemos dejado por motivos de compatibilidad." -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "**Phong:** Igual que arriba." -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" "**Toon:** Crea un blob toon, que cambia de tamaño dependiendo de la " "rugosidad." -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" "**Disabled:** A veces, esa mancha se interpone en el camino. ¡Vete de aquí!" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "Blend Mode" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." @@ -26094,75 +26295,75 @@ msgstr "" "cualquier otro modo que no sea Mix obliga al objeto a pasar por un pipeline " "transparente." -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" "Mix: Modo de mezcla por defecto, alpha controla el grado de transparencia " "del objeto." -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" "Add: El objeto es mezclado adicionalmente, bueno para efectos de llamas o " "similares al fuego." -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "Sub: El objeto es substraído." -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "Mul: El objeto es multiplicado." -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "Cull Mode" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" "Determina qué lado del objeto no se dibuja cuando se muestran los reversos:" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" "Back: La parte posterior del objeto es desechada cuando no es visible (por " "defecto)" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "Front: La parte frontal del objeto es desechada cuando no es visible" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" "Disabled: Utilizado para objetos de doble cara (no se realiza ningún proceso " "de desecho)" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "Depth Draw Mode" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "Especifica cuándo se debe realizar el renderizado de profundidad." -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" "Opaque Only (predeterminado): Sólo se dibuja la profundidad en objetos opacos" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" "Always: El dibujo de profundidad se realiza tanto para objetos opacos como " "transparentes" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" @@ -26170,7 +26371,7 @@ msgstr "" "Never: No se realiza ningún dibujo de profundidad (nota: no confundir con la " "opción de test de profundidad anterior)" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " @@ -26181,11 +26382,11 @@ msgstr "" "encima. Esta opción se puede utilizar con césped transparente o follaje de " "árboles." -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "Line Width (Ancho de línea)" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." @@ -26193,20 +26394,20 @@ msgstr "" "Al dibujar líneas, debe especificarse un ancho de las líneas que se están " "dibujando. Esta opción no está disponible en la mayoría del hardware moderno." -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "Point Size (Tamaño de puntos)" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" "Cuando se dibujen puntos, hay que especificar el tamaño del punto en píxeles." -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "Billboard Mode" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" @@ -26214,11 +26415,11 @@ msgstr "" "Activa billboard mode para materiales de dibujo. Esto controla la forma en " "que el objeto mira hacia la cámara:" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "Disabled: Billboard mode está desactivado" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." @@ -26226,11 +26427,11 @@ msgstr "" "Enabled: Billboard mode está activado, el eje -Z del objeto siempre estará " "de frente a la cámara." -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "Y-Billboard: el eje del Objeto X siempre estará alineado con la cámara" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." @@ -26238,22 +26439,22 @@ msgstr "" "Particles: Cuando se utilizan sistemas de partículas, este tipo de billboard " "es mejor, porque permite especificar opciones de animación." -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" "Las opciones anteriores sólo están habilitadas para Particle Billboard." -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "Grow" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" "Hace que los vértices del objeto crezcan en la dirección señalada por sus " "normales:" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" @@ -26262,11 +26463,11 @@ msgstr "" "segunda pasada de material, hazlo negro y sin sombrear, reverse culling " "(Cull Front), y añade algo de tamaño:" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "Usar Alpha Scissor" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." @@ -26274,7 +26475,7 @@ msgstr "" "Cuando no se necesita una transparencia distinta de 0 o 1, es posible " "establecer un umbral para evitar que el objeto represente estos píxeles." -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." @@ -26282,11 +26483,11 @@ msgstr "" "Esto renderiza el objeto a través de un pipeline opaco que es más rápido y " "permite realizar efectos de medio y post proceso como SSAO, SSR, etc." -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "Color de materiales, mapas y canales" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " @@ -26296,11 +26497,11 @@ msgstr "" "colores, texturas y canales. Godot soporta una extensa lista de estos. A " "continuación se describen con más detalle:" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "Albedo" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -26315,13 +26516,13 @@ msgstr "" "este color afecta a muchos más cálculos que sólo la ruta de iluminación " "difusa." -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" "El color y la textura del albedo se pueden utilizar juntos a medida que se " "multiplican." -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " @@ -26332,11 +26533,11 @@ msgstr "" "*alpha channel*, asegúrate de habilitar la transparencia o *alpha " "scissoring* para que funcione." -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "Metallic" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -26349,7 +26550,7 @@ msgstr "" "luz y mayor es el reflejo de ésta. Este modelo se llama \"energy conserving" "\" (ahorro de energía)." -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " @@ -26359,7 +26560,7 @@ msgstr "" "(a diferencia de *metallic*, éste no ahorra energía, así que simplemente " "déjalo en 0.5 y no lo toques a menos que lo necesites)." -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." @@ -26367,11 +26568,11 @@ msgstr "" "El mínimo de reflectividad interna es de 0.04, por lo que (al igual que en " "la vida real) es imposible hacer un material completamente antirreflectante." -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "Roughness" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -26384,11 +26585,11 @@ msgstr "" "Los tipos más comunes de materiales se pueden lograr con la combinación " "correcta de *Metallic* y *Roughness*." -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "Emission" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -26400,11 +26601,11 @@ msgstr "" "Este valor se añade a la imagen final resultante y no se ve afectado por " "otras luces de la escena." -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "Normalmap" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -26416,11 +26617,11 @@ msgstr "" "incidencia de la luz. En Godot, sólo R y G se utilizan para mapas normales, " "con el fin de lograr una mejor compatibilidad." -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "Rim" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -26434,7 +26635,7 @@ msgstr "" "emisión, éste en realidad tiene en cuenta la luz (si no hay luz, no hay " "borde). Esto hace que el efecto sea mucho más creíble." -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -26447,11 +26648,11 @@ msgstr "" "albedo del material. El uso de valores intermedios generalmente funciona " "mejor." -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "Clearcoat" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " @@ -26462,11 +26663,11 @@ msgstr "" "pintura de automóviles y juguetes. En la práctica, es un specular blob más " "pequeño añadido sobre el material existente." -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "Anisotropy" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -26478,11 +26679,11 @@ msgstr "" "como el aluminio pulido sean más realistas. Funciona especialmente bien " "cuando se combina con diagramas de flujo." -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "Ambient Occlusion" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -26498,16 +26699,17 @@ msgstr "" "(SSAO) para generar AO, nada superará la calidad de un mapa de AO bien " "bakeado. Se recomienda prebakear AO siempre que sea posible." -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Depth" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 +#, fuzzy msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" "Establecer un mapa de profundidad a un material genera una trayectoria de " @@ -26517,11 +26719,11 @@ msgstr "" "pero produce un efecto de profundidad realista para los textos. Para obtener " "mejores resultados, se debe utilizar *Depth* junto con normal mapping." -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "Subsurface Scattering" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " @@ -26531,11 +26733,11 @@ msgstr "" "dispersa y luego sale. Es útil para hacer pieles realistas, mármol, líquidos " "de colores, etc." -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "Transmission" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " @@ -26545,11 +26747,11 @@ msgstr "" "lado oscuro (lado opuesto a la luz). Esto funciona bien para objetos " "delgados como hojas de árboles/plantas, césped, orejas humanas, etc." -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "Refraction" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " @@ -26560,11 +26762,11 @@ msgstr "" "en su lugar. Esto permite distorsionar la transparencia de manera similar a " "la refracción." -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "Detail" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " @@ -26575,11 +26777,11 @@ msgstr "" "UV secundario o modo triplanar, se pueden lograr muchas texturas " "interesantes." -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "UV1 y UV2" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " @@ -26589,11 +26791,11 @@ msgstr "" "veces útil para AO o Emisiones (luces pre-calculadas). Los UVs pueden ser " "escalados o compensados, lo cual es útil para texturas que se repiten." -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "Mapeado Triplanar" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -26606,7 +26808,7 @@ msgstr "" "normal. Triplanar puede ser tanto en el espacio mundo como en el espacio " "objeto." -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." @@ -26615,11 +26817,11 @@ msgstr "" "mismo material con el triplanar del mundo, por lo que los ladrillos " "continuan de forma continua entre ellos." -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "Desvanecimiento de Proximidad y Distancia" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -26634,7 +26836,7 @@ msgstr "" "útil para pozos de luz o indicadores que solo estan presentes a cierta " "distancia." -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." @@ -26642,11 +26844,11 @@ msgstr "" "Tenga en cuenta que habilitar estos permite la mezcla alfa, por lo que " "abusar de ellos para toda una escena no es generalmente una buena idea." -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "Prioridad de renderizado" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -26813,7 +27015,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -28116,7 +28318,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -28226,7 +28428,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -29493,309 +29695,437 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." -msgstr "" -"Si no están seleccionados todos los vértices de tu malla, selecciónalos " -"todos (pulsa \"A\"). Deben parecer naranjas, no negras. A continuación, en " -"el grupo de botones Shading/UVs a la izquierda, haz clic en el botón " -"\"Desplegar\" (Unwrap) (o simplemente pulsa \"U\") y selecciona \"Proyección " -"Inteligente\" (Smart UV Project). Mantén las opciones por defecto y pulsa " -"\"Ok\"." - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +#, fuzzy +msgid "Fragment Shader" +msgstr "Procesador Fragment" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "Uniforms" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +#, fuzzy +msgid "Interacting with light" +msgstr "Interpolación con Quaternions" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -29807,6 +30137,7 @@ msgid "Part 1" msgstr "Parte 1" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "Introducción al tutorial" @@ -29983,6 +30314,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -30002,6 +30334,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -30047,14 +30380,17 @@ msgstr "" "y apagar una linterna y correr." #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "Preparando todo" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "Inicia Godot y abre el proyecto incluido en los recursos iniciales." #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -30344,7 +30680,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -30483,8 +30819,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -30866,11 +31202,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -30900,11 +31237,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -31020,9 +31358,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -31108,7 +31446,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -31116,7 +31454,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -31152,8 +31490,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -31183,7 +31521,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -31219,7 +31558,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -31296,7 +31635,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -31327,10 +31666,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -31353,8 +31692,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -31400,7 +31739,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -31428,9 +31767,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -31445,15 +31784,16 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 +#, fuzzy msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -31472,7 +31812,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -31509,7 +31849,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -31530,7 +31870,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -31573,9 +31913,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -31613,92 +31953,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -31708,37 +32048,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -31748,32 +32088,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -31782,19 +32122,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -31802,26 +32142,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -31829,7 +32169,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -31838,7 +32178,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -31847,20 +32187,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -31869,66 +32209,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -31938,31 +32278,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -31972,51 +32312,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -32024,23 +32364,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -32048,45 +32388,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -32094,7 +32434,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -32104,51 +32444,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -32156,13 +32496,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -32170,65 +32510,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -32236,7 +32576,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -32244,84 +32584,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -32330,24 +32670,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -32355,56 +32695,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -32412,14 +32752,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -32427,7 +32767,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -32437,49 +32777,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -32488,7 +32824,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -32497,19 +32833,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -32518,47 +32854,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -32566,53 +32902,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -32622,11 +32958,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -32639,57 +32975,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -32876,7 +33212,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -32889,7 +33225,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -32941,8 +33277,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -33127,8 +33463,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -33273,7 +33608,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -33445,7 +33780,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -33458,7 +33793,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -33473,7 +33808,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -33483,8 +33818,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -33497,7 +33832,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -33582,7 +33917,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -33646,30 +33981,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -33677,108 +34012,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -33786,49 +34121,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "Abre ``Player.gd`` y añade las siguientes variables de clase:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -33836,27 +34171,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -33866,7 +34201,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -33875,14 +34210,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -33891,32 +34226,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -33924,7 +34259,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -33934,56 +34269,56 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" "Vamos a repasar lo que está haciendo este script, empezando por sus " "variables de clase:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -33991,38 +34326,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -34030,29 +34365,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -34061,29 +34396,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -34092,13 +34427,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -34106,18 +34441,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -34125,38 +34460,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "Abre ``Player.gd`` y añade la siguiente variable de clase:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -34164,38 +34499,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -34204,32 +34539,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -34237,7 +34572,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -34245,13 +34580,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -34259,20 +34594,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -34281,20 +34616,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -34303,71 +34638,72 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" "Repasemos lo que hace este script, empezando por las variables de clase:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -34377,11 +34713,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -34389,39 +34725,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -34430,67 +34766,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "En este caso, queremos volver a generar nuestro objetivo." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -34500,34 +34836,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -34535,20 +34871,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -35563,6 +35899,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -37399,15 +37736,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -41150,12 +41504,6 @@ msgstr "" msgid "An example:" msgstr "Un ejemplo:" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animación" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "Introducción a las características de la animación 2D" @@ -43431,8 +43779,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -43664,10 +44012,11 @@ msgstr "" "como un seguimiento del mismo." #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 +#, fuzzy msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" "Estaríamos usando la demo oficial como ejemplo, puedes descargarla en el " "AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " @@ -47446,11 +47795,13 @@ msgstr "" "incluyendo:" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +#, fuzzy +msgid "Rendering 3D objects within a 2D game" msgstr "Renderizar objetos 3d dentro de un juego 2d" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +#, fuzzy +msgid "Rendering 2D elements in a 3D game" msgstr "Renderizar elementos 2d en un juego 3d" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -47476,12 +47827,13 @@ msgstr "" "elegir qué hacer con la textura resultante." #: ../../docs/tutorials/viewports/viewports.rst:40 +#, fuzzy msgid "" ":ref:`Viewports ` are also responsible for delivering " "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" "Los :ref:`Viewports ` son también responsables de entregar " @@ -47531,10 +47883,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -47591,7 +47943,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -47663,7 +48015,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -47677,7 +48029,7 @@ msgstr "" "El tamaño del :ref:`ViewportContainer ` no puede " "ser menor que el tamaño del :ref:`Viewport `." -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -47688,7 +48040,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -47696,7 +48048,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -47704,43 +48056,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -47749,17 +48101,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -47769,7 +48121,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -47780,7 +48132,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -47795,30 +48147,40 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 +#, fuzzy msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" +"Establece si el área de trabajo se redimensionará a la anchura y la altura " +"especificadas en la configuración del proyecto al inicio. Por defecto es " +"``true``." #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -47829,7 +48191,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -47837,89 +48199,200 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." -msgstr "" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +#, fuzzy +msgid "Stretch Mode" +msgstr "Specular Mode (Modo Specular)" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +#, fuzzy +msgid "Stretch Shrink" +msgstr "Stretch transform" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +#, fuzzy +msgid "From scripts" +msgstr "Script Personalizado" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -47989,7 +48462,7 @@ msgstr "\"particles\": Para sistemas de partículas." #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "Modos de Render" @@ -48804,10 +49277,6 @@ msgstr "" "El valor es interpolado en una manera corregida por perspectiva. Es el modo " "por defecto" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "Uniforms" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -49645,7 +50114,7 @@ msgstr "Modos de render aceptados y built-ins para **shader_type spatial;**." #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "Modo de render" @@ -49873,7 +50342,7 @@ msgstr "Usa iluminación basada en vértices." #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -49939,9 +50408,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -50019,7 +50488,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -50162,7 +50631,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -50206,7 +50675,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -50223,7 +50692,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -50358,7 +50827,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -50387,8 +50856,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -50405,7 +50874,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -50414,7 +50883,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -50560,12 +51029,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -50629,7 +51098,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -50646,261 +51115,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -53189,6 +53657,1867 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +#, fuzzy +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "A lo largo del curso de esta serie de tutoriales, cubriremos cómo:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" +"Añadir la habilidad de agarrar y lanzar nodos :ref:`RigidBody " +"`" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +#, fuzzy +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" +"Aunque este tutorial puede ser completado por principiantes, es altamente " +"aconsejable completar :ref:`doc_your_first_game`, si eres nuevo en Godot y/o " +"en el desarrollo de juegos **antes de** pasar por esta serie de tutoriales." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +#, fuzzy +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" +"Este tutorial asume que tienes experiencia trabajando con el editor de " +"Godot, tienes experiencia básica de programación en GDScript, y tienes " +"experiencia básica en el desarrollo de juegos." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +#, fuzzy +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" +"Puedes encontrar los recursos de inicio para este tutorial aquí: :download:" +"`Godot_FPS_Starter.zip `" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +#, fuzzy +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" +"Los recursos de inicio proporcionados contienen un modelo 3D animado, un " +"montón de modelos 3D para hacer niveles y algunas escenas ya configuradas " +"para este tutorial." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +#, fuzzy +msgid "You can find the finished project at the bottom of this page" +msgstr "" +"Puedes encontrar el proyecto terminado para cada parte en la parte inferior " +"de la página de cada parte" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Configurando" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +#, fuzzy +msgid "With that done, let's quickly go over what this script does." +msgstr "Repasemos lo que hace este script:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "Movimiento del jugador (player)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +#, fuzzy +msgid "Adding destroyable targets" +msgstr "Añadir vectores" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +#, fuzzy +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" +"Repasemos lo que hace este script, empezando por las variables de clase:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +#, fuzzy +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" +"Añadir la habilidad de agarrar y lanzar nodos :ref:`RigidBody " +"`" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +#, fuzzy +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "Añadir objetivos que se rompen cuando han recibido suficiente daño" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "Abre ``Player.gd`` y añade las siguientes variables de clase:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "Añadir un script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Hay algunas cosas a tener en cuenta:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "Añadir un script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Añadir una Función" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +#, fuzzy +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" +"Repasemos lo que hace este script, empezando por las variables de clase:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +#, fuzzy +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" +"``current_state``: Un variable para contener el nombre del estado de " +"animación en que estamos actualmente." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +#, fuzzy +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" +"Primero obtenemos todos los nodos que necesitaremos y los asignamos a las " +"variables de clase apropiadas." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Añadir un script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +#, fuzzy +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" +"Repasemos lo que hace este script, empezando por las variables de clase:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Comenzando el juego" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +#, fuzzy +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" +"Repasemos lo que hace este script, empezando por las variables de clase:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +#, fuzzy +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" +"Repasemos lo que hace este script, empezando por las variables de clase:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +#, fuzzy +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" +"Para añadir el componente final a la mezcla, Godot proporciona el tipo :ref:" +"`Transform `. Transform tiene dos miembros:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +#, fuzzy +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" +"Puedes descargar este proyecto de ejemplo aquí: :download:`2D_movement_demo." +"zip `" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Plugins" @@ -58666,7 +60995,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -58711,9 +61040,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -58744,17 +61074,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -58772,6 +61103,61 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Línea de comandos" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +#, fuzzy +msgid "default: no" +msgstr "Entorno por defecto" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +#, fuzzy +msgid "default: yes" +msgstr "Características por defecto" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -61371,7 +63757,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -61430,15 +63816,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "Skeleton" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -61569,7 +63951,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -61643,20 +64025,22 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" -msgstr "" +#, fuzzy +msgid "Tangents array" +msgstr "Tangente" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" -msgstr "" +#, fuzzy +msgid "Vertex color array" +msgstr "Vertex Color (Color de vértice)" #: ../../docs/development/file_formats/tscn.rst:333 msgid "UV array 1" @@ -61667,15 +64051,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -61712,8 +64096,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -61793,7 +64177,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -62168,10 +64552,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Además de esta documentación, tal vez quieras echar un vistazo a varios " +"`proyectos de demostración `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" @@ -64628,6 +67016,27 @@ msgstr "" "`Zeef Godot Engine: Un directorio de recursos supervisado por Andre Schmitz " "`_" +#~ msgid "" +#~ "**Toon:** Provides a hard cut for lighting, with smoothing affected by " +#~ "roughness." +#~ msgstr "" +#~ "**Toon:** Proporciona un corte duro para la iluminación, con suavizado " +#~ "afectado por la rugosidad." + +#~ msgid "" +#~ "If all the vertices of your mesh are not selected, select them all (hit " +#~ "\"A\"). They must appear orange, not black. Then, in the Shading/UVs " +#~ "button group to the left, click the \"Unwrap\" button (or simply hit \"U" +#~ "\") and select \"Smart UV Project\". Keep the default options and hit \"Ok" +#~ "\"." +#~ msgstr "" +#~ "Si no están seleccionados todos los vértices de tu malla, selecciónalos " +#~ "todos (pulsa \"A\"). Deben parecer naranjas, no negras. A continuación, " +#~ "en el grupo de botones Shading/UVs a la izquierda, haz clic en el botón " +#~ "\"Desplegar\" (Unwrap) (o simplemente pulsa \"U\") y selecciona " +#~ "\"Proyección Inteligente\" (Smart UV Project). Mantén las opciones por " +#~ "defecto y pulsa \"Ok\"." + #~ msgid "If a parent constructor takes arguments, they are passed like this:" #~ msgstr "" #~ "Si un constructor heredado recibe argumentos, se pasarán de esta manera:" diff --git a/weblate/es_MX.po b/weblate/es_MX.po index fd7589c91e..3b09ade879 100644 --- a/weblate/es_MX.po +++ b/weblate/es_MX.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-05-25 04:42+0000\n" "Last-Translator: Jonatan David Orozco Cantillo \n" "Language-Team: Spanish (Mexico) ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3265,109 +3276,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3375,55 +3386,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3431,57 +3442,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3491,17 +3502,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3509,7 +3520,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3517,55 +3528,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3573,17 +3584,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3930,7 +3941,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3939,24 +3950,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3965,11 +3976,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3977,7 +3988,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3986,7 +3997,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3994,18 +4005,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4013,7 +4024,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4021,7 +4032,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4029,28 +4040,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4059,32 +4070,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4092,17 +4104,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4110,7 +4122,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4119,11 +4131,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4131,36 +4143,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8687,9 +8699,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12091,8 +12103,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12210,7 +12222,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13265,7 +13277,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13457,28 +13469,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13569,58 +13581,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13680,6 +13640,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13699,6 +13666,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14138,7 +14318,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19110,7 +19290,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19153,7 +19333,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19178,10 +19358,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19260,7 +19440,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19351,7 +19531,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19471,18 +19651,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19490,108 +19670,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19600,261 +19780,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19863,22 +20044,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19886,24 +20067,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19911,11 +20092,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19923,11 +20104,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19935,11 +20116,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19948,7 +20129,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19956,22 +20137,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19979,11 +20160,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19993,79 +20174,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20073,17 +20254,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20092,17 +20273,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20245,7 +20426,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21538,7 +21719,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21646,7 +21827,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22909,303 +23090,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23217,6 +23530,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23363,6 +23677,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23377,6 +23692,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23412,14 +23728,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23698,7 +24017,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23837,8 +24156,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24219,11 +24538,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24253,11 +24573,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24367,9 +24688,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24455,7 +24776,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24463,7 +24784,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24499,8 +24820,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24530,7 +24851,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24566,7 +24888,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24643,7 +24965,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24669,10 +24991,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24695,8 +25017,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24742,7 +25064,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24770,9 +25092,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24787,15 +25109,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24808,7 +25130,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24845,7 +25167,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24866,7 +25188,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24909,9 +25231,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24949,92 +25271,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25044,37 +25366,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25084,32 +25406,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25118,19 +25440,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25138,26 +25460,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25165,7 +25487,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25174,7 +25496,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25183,20 +25505,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25205,66 +25527,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25274,31 +25596,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25308,51 +25630,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25360,23 +25682,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25384,45 +25706,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25430,7 +25752,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25440,51 +25762,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25492,13 +25814,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25506,65 +25828,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25572,7 +25894,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25580,84 +25902,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25666,24 +25988,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25691,56 +26013,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25748,14 +26070,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25763,7 +26085,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25773,49 +26095,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25824,7 +26142,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25833,19 +26151,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25854,47 +26172,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25902,53 +26220,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25958,11 +26276,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25975,57 +26293,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26212,7 +26530,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26225,7 +26543,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26277,8 +26595,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26461,8 +26779,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26607,7 +26924,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26773,7 +27090,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26786,7 +27103,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26801,7 +27118,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26811,8 +27128,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26825,7 +27142,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26910,7 +27227,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26974,30 +27291,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27005,108 +27322,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27114,49 +27431,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27164,27 +27481,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27194,7 +27511,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27203,14 +27520,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27219,32 +27536,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27252,7 +27569,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27262,54 +27579,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27317,38 +27634,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27356,29 +27673,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27387,29 +27704,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27418,13 +27735,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27432,18 +27749,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27451,38 +27768,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27490,38 +27807,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27530,32 +27847,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27563,7 +27880,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27571,13 +27888,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27585,20 +27902,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27607,20 +27924,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27629,70 +27946,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27702,11 +28020,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27714,39 +28032,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27755,67 +28073,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27825,34 +28143,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27860,20 +28178,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28884,6 +29202,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30639,15 +30958,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33478,12 +33814,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35455,8 +35785,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35663,9 +35993,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39362,11 +39692,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39394,7 +39724,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39435,10 +39765,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39495,7 +39825,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39562,7 +39892,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39571,7 +39901,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39582,7 +39912,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39590,7 +39920,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39598,43 +39928,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39643,17 +39973,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39663,7 +39993,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39674,7 +40004,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39686,30 +40016,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39720,7 +40056,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39728,89 +40064,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39869,7 +40313,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40605,10 +41049,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41429,7 +41869,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41654,7 +42094,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41720,9 +42160,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41800,7 +42240,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41943,7 +42383,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41987,7 +42427,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42004,7 +42444,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42139,7 +42579,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42168,8 +42608,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42186,7 +42626,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42195,7 +42635,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42341,12 +42781,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42410,7 +42850,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42427,261 +42867,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44587,6 +45026,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49955,7 +52196,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50000,9 +52241,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50033,17 +52275,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50061,6 +52304,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52620,7 +54915,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52679,15 +54974,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52818,7 +55109,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52892,19 +55183,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52916,15 +55207,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52961,8 +55252,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53042,7 +55333,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53386,7 +55677,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/fa.po b/weblate/fa.po index b587b67037..7b3a1fac2c 100644 --- a/weblate/fa.po +++ b/weblate/fa.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-09 01:41+0000\n" "Last-Translator: Amir Hossein Mafi \n" "Language-Team: Persian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3305,109 +3316,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3415,55 +3426,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3471,57 +3482,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3531,17 +3542,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3549,7 +3560,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3557,55 +3568,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3613,17 +3624,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3972,7 +3983,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3981,24 +3992,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4007,11 +4018,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4019,7 +4030,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4028,7 +4039,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4036,18 +4047,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4055,7 +4066,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4063,7 +4074,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4071,28 +4082,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4101,32 +4112,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4134,17 +4146,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4152,7 +4164,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4161,11 +4173,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4173,36 +4185,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8729,9 +8741,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12137,8 +12149,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12256,7 +12268,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13311,7 +13323,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13503,28 +13515,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13616,58 +13628,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13727,6 +13687,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13746,6 +13713,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14185,7 +14365,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19164,7 +19344,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19207,7 +19387,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19232,10 +19412,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19314,7 +19494,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19405,7 +19585,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19525,18 +19705,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19544,108 +19724,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19654,261 +19834,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19917,22 +20098,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19940,24 +20121,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19965,11 +20146,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19977,11 +20158,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19989,11 +20170,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20002,7 +20183,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20010,22 +20191,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20033,11 +20214,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20047,79 +20228,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20127,17 +20308,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20146,17 +20327,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20299,7 +20480,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21592,7 +21773,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21700,7 +21881,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22963,303 +23144,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23271,6 +23584,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23417,6 +23731,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23431,6 +23746,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23466,14 +23782,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23752,7 +24071,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23891,8 +24210,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24273,11 +24592,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24307,11 +24627,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24421,9 +24742,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24509,7 +24830,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24517,7 +24838,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24553,8 +24874,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24584,7 +24905,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24620,7 +24942,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24697,7 +25019,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24723,10 +25045,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24749,8 +25071,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24796,7 +25118,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24824,9 +25146,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24841,15 +25163,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24862,7 +25184,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24899,7 +25221,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24920,7 +25242,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24963,9 +25285,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25003,92 +25325,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25098,37 +25420,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25138,32 +25460,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25172,19 +25494,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25192,26 +25514,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25219,7 +25541,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25228,7 +25550,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25237,20 +25559,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25259,66 +25581,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25328,31 +25650,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25362,51 +25684,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25414,23 +25736,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25438,45 +25760,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25484,7 +25806,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25494,51 +25816,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25546,13 +25868,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25560,65 +25882,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25626,7 +25948,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25634,84 +25956,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25720,24 +26042,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25745,56 +26067,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25802,14 +26124,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25817,7 +26139,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25827,49 +26149,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25878,7 +26196,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25887,19 +26205,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25908,47 +26226,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25956,53 +26274,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26012,11 +26330,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26029,57 +26347,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26266,7 +26584,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26279,7 +26597,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26331,8 +26649,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26515,8 +26833,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26661,7 +26978,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26827,7 +27144,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26840,7 +27157,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26855,7 +27172,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26865,8 +27182,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26879,7 +27196,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26964,7 +27281,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27028,30 +27345,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27059,108 +27376,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27168,49 +27485,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27218,27 +27535,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27248,7 +27565,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27257,14 +27574,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27273,32 +27590,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27306,7 +27623,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27316,54 +27633,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27371,38 +27688,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27410,29 +27727,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27441,29 +27758,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27472,13 +27789,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27486,18 +27803,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27505,38 +27822,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27544,38 +27861,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27584,32 +27901,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27617,7 +27934,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27625,13 +27942,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27639,20 +27956,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27661,20 +27978,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27683,70 +28000,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27756,11 +28074,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27768,39 +28086,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27809,67 +28127,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27879,34 +28197,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27914,20 +28232,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28938,6 +29256,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30693,15 +31012,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33532,12 +33868,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35509,8 +35839,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35717,9 +36047,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39416,11 +39746,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39448,7 +39778,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39489,10 +39819,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39549,7 +39879,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39616,7 +39946,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39625,7 +39955,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39636,7 +39966,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39644,7 +39974,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39652,43 +39982,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39697,17 +40027,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39717,7 +40047,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39728,7 +40058,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39740,30 +40070,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39774,7 +40110,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39782,89 +40118,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39923,7 +40367,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40659,10 +41103,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41483,7 +41923,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41708,7 +42148,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41774,9 +42214,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41854,7 +42294,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41997,7 +42437,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42041,7 +42481,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42058,7 +42498,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42193,7 +42633,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42222,8 +42662,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42240,7 +42680,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42249,7 +42689,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42395,12 +42835,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42464,7 +42904,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42481,261 +42921,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44641,6 +45080,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50009,7 +52250,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50054,9 +52295,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50087,17 +52329,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50115,6 +52358,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "شرط" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52676,7 +54972,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52735,15 +55031,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52874,7 +55166,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52948,19 +55240,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52972,15 +55264,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53017,8 +55309,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53099,7 +55391,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53443,7 +55735,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/fi.po b/weblate/fi.po index 66276630cb..79104b8c18 100644 --- a/weblate/fi.po +++ b/weblate/fi.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-18 12:48+0000\n" "Last-Translator: Tapani Niemi \n" "Language-Team: Finnish ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3568,109 +3579,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3678,55 +3689,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3734,57 +3745,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3794,17 +3805,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3812,7 +3823,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3820,55 +3831,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Partikkelit" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3876,17 +3887,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4233,7 +4244,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4242,24 +4253,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4268,11 +4279,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4280,7 +4291,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4289,7 +4300,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4297,18 +4308,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4316,7 +4327,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4324,7 +4335,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4332,28 +4343,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4362,32 +4373,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Resurssit" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4395,17 +4408,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4413,7 +4426,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4422,11 +4435,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4434,36 +4447,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8990,9 +9003,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12395,8 +12408,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12514,7 +12527,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13569,7 +13582,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13784,28 +13797,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13896,59 +13909,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Godotissa ei ole mitään käyttörajoituksia" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -14009,6 +13969,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -14028,6 +13995,225 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Godotissa ei ole mitään käyttörajoituksia" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "ArrayMesh" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "Skeleton" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +#, fuzzy +msgid "Bone Weights" +msgstr "taulukko luiden painoja" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +#, fuzzy +msgid "Bone Attachment" +msgstr "BoneAttachment" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animaatio" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animaatio" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animaatiotoistin (AnimationPlayer)" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14467,7 +14653,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19457,7 +19643,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19500,7 +19686,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19525,10 +19711,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19607,7 +19793,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19698,7 +19884,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19818,18 +20004,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19837,108 +20023,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19947,261 +20133,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20210,22 +20397,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20233,24 +20420,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20258,11 +20445,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20270,11 +20457,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20282,11 +20469,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20295,7 +20482,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20303,22 +20490,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20326,11 +20513,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20340,79 +20527,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Syvyys" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20420,17 +20607,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20439,17 +20626,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20592,7 +20779,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21885,7 +22072,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21993,7 +22180,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23256,303 +23443,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23564,6 +23883,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23710,6 +24030,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23724,6 +24045,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23759,14 +24081,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -24045,7 +24370,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24184,8 +24509,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24566,11 +24891,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24600,11 +24926,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24714,9 +25041,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24802,7 +25129,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24810,7 +25137,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24846,8 +25173,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24877,7 +25204,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24913,7 +25241,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24990,7 +25318,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -25016,10 +25344,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -25042,8 +25370,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -25089,7 +25417,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -25117,9 +25445,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -25134,15 +25462,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -25155,7 +25483,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25192,7 +25520,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25213,7 +25541,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25256,9 +25584,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25296,92 +25624,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25391,37 +25719,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25431,32 +25759,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25465,19 +25793,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25485,26 +25813,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25512,7 +25840,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25521,7 +25849,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25530,20 +25858,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25552,66 +25880,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25621,31 +25949,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25655,51 +25983,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25707,23 +26035,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25731,45 +26059,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25777,7 +26105,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25787,51 +26115,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25839,13 +26167,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25853,65 +26181,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25919,7 +26247,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25927,84 +26255,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -26013,24 +26341,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -26038,56 +26366,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -26095,14 +26423,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -26110,7 +26438,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -26120,49 +26448,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26171,7 +26495,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26180,19 +26504,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26201,47 +26525,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26249,53 +26573,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26305,11 +26629,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26322,57 +26646,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26559,7 +26883,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26572,7 +26896,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26624,8 +26948,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26808,8 +27132,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26954,7 +27277,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -27120,7 +27443,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -27133,7 +27456,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -27148,7 +27471,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -27158,8 +27481,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27172,7 +27495,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27257,7 +27580,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27321,30 +27644,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27352,108 +27675,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27461,49 +27784,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27511,27 +27834,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27541,7 +27864,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27550,14 +27873,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27566,32 +27889,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27599,7 +27922,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27609,54 +27932,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27664,38 +27987,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27703,29 +28026,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27734,29 +28057,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27765,13 +28088,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27779,18 +28102,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27798,38 +28121,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27837,38 +28160,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27877,32 +28200,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27910,7 +28233,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27918,13 +28241,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27932,20 +28255,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27954,20 +28277,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27976,70 +28299,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -28049,11 +28373,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -28061,39 +28385,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -28102,67 +28426,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28172,34 +28496,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28207,20 +28531,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29231,6 +29555,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30986,15 +31311,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33825,12 +34167,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animaatio" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35802,8 +36138,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -36010,9 +36346,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39709,11 +40045,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39741,7 +40077,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39782,10 +40118,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39842,7 +40178,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39909,7 +40245,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39918,7 +40254,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39929,7 +40265,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39937,7 +40273,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39945,43 +40281,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39990,17 +40326,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -40010,7 +40346,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -40021,7 +40357,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -40033,30 +40369,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -40067,7 +40409,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -40075,89 +40417,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40216,7 +40666,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40952,10 +41402,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41776,7 +42222,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -42001,7 +42447,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -42067,9 +42513,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -42147,7 +42593,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42290,7 +42736,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42334,7 +42780,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42351,7 +42797,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42486,7 +42932,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42515,8 +42961,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42533,7 +42979,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42542,7 +42988,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42688,12 +43134,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42757,7 +43203,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42774,261 +43220,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44934,6 +45379,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Godotissa ei ole mitään käyttörajoituksia" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Lisäosat" @@ -50302,7 +52550,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50347,9 +52595,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50380,17 +52629,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50408,6 +52658,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52993,8 +55295,9 @@ msgid "The Scene Tree" msgstr "Skenepuu" #: ../../docs/development/file_formats/tscn.rst:66 +#, fuzzy msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -53073,15 +55376,12 @@ msgstr "" "käyttää :code:`NodePath()` rakennetta osoittamaan solmun animoitavaa " "attribuuttia." -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "Skeleton" - #: ../../docs/development/file_formats/tscn.rst:155 +#, fuzzy msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" "Skeleton-solmu periytyy Spatial-solmusta. Sen lisäksi sillä voi olla lista " "luita (bones) avain-arvo pareina muodossa :code:`bones/Id/Attribute=Value`. " @@ -53240,8 +55540,9 @@ msgid "An ID" msgstr "Tunnus (\"id\")" #: ../../docs/development/file_formats/tscn.rst:275 +#, fuzzy msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53334,20 +55635,24 @@ msgstr "" "PRIMITIVE_TRIANGLES on usein käytetty." #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +#, fuzzy +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" ":code:`arrays` kuten nimikin vihjaa, on taulukko taulukoita, joka sisältää:" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +#, fuzzy +msgid "An array of vertex position" msgstr "taulukko kärkipisteiden sijainteja" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +#, fuzzy +msgid "Tangents array" msgstr "taulukko tangentteja" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +#, fuzzy +msgid "Vertex color array" msgstr "taulukko kärkipisteiden värejä" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53359,15 +55664,18 @@ msgid "UV array 2" msgstr "UV-taulukko 2" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +#, fuzzy +msgid "Bone index array" msgstr "taulukko luuindeksejä" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +#, fuzzy +msgid "Bone weight array" msgstr "taulukko luiden painoja" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +#, fuzzy +msgid "Vertex index array" msgstr "taulukko kärkipisteiden indeksejä" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53407,9 +55715,10 @@ msgid ":code:`length` and :code:`step` are both time in seconds" msgstr "Sekä :code:`length` että :code:`step` ilmaisevat aikaa sekunteina" #: ../../docs/development/file_formats/tscn.rst:375 +#, fuzzy msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" "Kukin raita on kuvattu listana avainruutujen ja arvojen pareja :code:`tracks/" "Id/Attribute` muodossa, sisältäen:" @@ -53498,7 +55807,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53841,10 +56150,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Tämän dokumentaation lisäksi voit myös katsoa erilaisia Godot demoprojekteja " +"`_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/fil.po b/weblate/fil.po index c9177e99d7..2b1ae5fda8 100644 --- a/weblate/fil.po +++ b/weblate/fil.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-05-15 01:36+0000\n" "Last-Translator: Daris C. Mondigo \n" "Language-Team: Filipino ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3247,109 +3258,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3357,55 +3368,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3413,57 +3424,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3473,17 +3484,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3491,7 +3502,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3499,55 +3510,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3555,17 +3566,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3912,7 +3923,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3921,24 +3932,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3947,11 +3958,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3959,7 +3970,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3968,7 +3979,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3976,18 +3987,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -3995,7 +4006,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4003,7 +4014,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4011,28 +4022,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4041,32 +4052,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4074,17 +4086,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4092,7 +4104,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4101,11 +4113,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4113,36 +4125,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8669,9 +8681,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12073,8 +12085,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12192,7 +12204,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13247,7 +13259,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13439,28 +13451,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13551,58 +13563,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13662,6 +13622,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13681,6 +13648,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14120,7 +14300,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19092,7 +19272,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19135,7 +19315,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19160,10 +19340,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19242,7 +19422,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19333,7 +19513,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19453,18 +19633,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19472,108 +19652,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19582,261 +19762,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19845,22 +20026,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19868,24 +20049,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19893,11 +20074,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19905,11 +20086,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19917,11 +20098,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19930,7 +20111,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19938,22 +20119,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19961,11 +20142,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19975,79 +20156,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20055,17 +20236,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20074,17 +20255,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20227,7 +20408,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21520,7 +21701,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21628,7 +21809,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22891,303 +23072,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23199,6 +23512,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23345,6 +23659,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23359,6 +23674,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23394,14 +23710,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23680,7 +23999,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23819,8 +24138,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24201,11 +24520,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24235,11 +24555,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24349,9 +24670,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24437,7 +24758,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24445,7 +24766,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24481,8 +24802,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24512,7 +24833,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24548,7 +24870,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24625,7 +24947,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24651,10 +24973,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24677,8 +24999,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24724,7 +25046,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24752,9 +25074,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24769,15 +25091,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24790,7 +25112,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24827,7 +25149,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24848,7 +25170,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24891,9 +25213,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24931,92 +25253,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25026,37 +25348,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25066,32 +25388,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25100,19 +25422,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25120,26 +25442,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25147,7 +25469,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25156,7 +25478,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25165,20 +25487,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25187,66 +25509,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25256,31 +25578,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25290,51 +25612,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25342,23 +25664,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25366,45 +25688,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25412,7 +25734,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25422,51 +25744,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25474,13 +25796,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25488,65 +25810,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25554,7 +25876,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25562,84 +25884,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25648,24 +25970,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25673,56 +25995,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25730,14 +26052,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25745,7 +26067,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25755,49 +26077,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25806,7 +26124,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25815,19 +26133,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25836,47 +26154,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25884,53 +26202,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25940,11 +26258,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25957,57 +26275,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26194,7 +26512,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26207,7 +26525,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26259,8 +26577,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26443,8 +26761,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26589,7 +26906,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26755,7 +27072,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26768,7 +27085,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26783,7 +27100,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26793,8 +27110,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26807,7 +27124,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26892,7 +27209,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26956,30 +27273,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -26987,108 +27304,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27096,49 +27413,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27146,27 +27463,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27176,7 +27493,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27185,14 +27502,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27201,32 +27518,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27234,7 +27551,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27244,54 +27561,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27299,38 +27616,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27338,29 +27655,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27369,29 +27686,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27400,13 +27717,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27414,18 +27731,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27433,38 +27750,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27472,38 +27789,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27512,32 +27829,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27545,7 +27862,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27553,13 +27870,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27567,20 +27884,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27589,20 +27906,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27611,70 +27928,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27684,11 +28002,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27696,39 +28014,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27737,67 +28055,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27807,34 +28125,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27842,20 +28160,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28866,6 +29184,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30621,15 +30940,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33460,12 +33796,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35437,8 +35767,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35645,9 +35975,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39344,11 +39674,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39376,7 +39706,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39417,10 +39747,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39477,7 +39807,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39544,7 +39874,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39553,7 +39883,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39564,7 +39894,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39572,7 +39902,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39580,43 +39910,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39625,17 +39955,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39645,7 +39975,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39656,7 +39986,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39668,30 +39998,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39702,7 +40038,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39710,89 +40046,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39851,7 +40295,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40587,10 +41031,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41411,7 +41851,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41636,7 +42076,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41702,9 +42142,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41782,7 +42222,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41925,7 +42365,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41969,7 +42409,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -41986,7 +42426,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42121,7 +42561,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42150,8 +42590,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42168,7 +42608,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42177,7 +42617,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42323,12 +42763,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42392,7 +42832,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42409,261 +42849,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44569,6 +45008,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49937,7 +52178,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -49982,9 +52223,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50015,17 +52257,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50043,6 +52286,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52602,7 +54897,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52661,15 +54956,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52800,7 +55091,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52874,19 +55165,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52898,15 +55189,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52943,8 +55234,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53024,7 +55315,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53368,7 +55659,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/fr.po b/weblate/fr.po index ed4e6d5982..4731919b44 100644 --- a/weblate/fr.po +++ b/weblate/fr.po @@ -46,7 +46,7 @@ msgid "" msgstr "" "Project-Id-Version: French (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-18 12:48+0000\n" "Last-Translator: Ewan Lehnebach \n" "Language-Team: French ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " @@ -4417,23 +4429,23 @@ msgstr "" "de sorte que les informations qu'il affiche ne sont couvertes par aucun " "élément du jeu comme le joueur ou les monstres." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "Le HUD affiche les informations suivantes :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "Le score, modifié par ``ScoreTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "Un message, tel que \"Game Over\" ou \"Get Ready\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "Un bouton \"Démarrer\" pour commencer le jeu." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -4444,27 +4456,27 @@ msgstr "" "nous utiliserons deux types de nœuds :ref:`Control ` : :ref:" "`Label ` et :ref:`Button `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "Créez les éléments suivants en tant qu'enfants du nœud ``HUD`` :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "Un :ref:`Label ` nommé ``ScoreLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "Un :ref:`Label ` nommé ``MessageLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "Un :ref:`Button ` nommé ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "Un :ref:`Timer ` nommé ``MessageTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -4481,7 +4493,7 @@ msgstr "" "contrôle et son ancrage. Voir :ref:" "`doc_design_interfaces_with_the_control_nodes` pour plus de détails." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" @@ -4489,7 +4501,7 @@ msgstr "" "Disposez les nœuds comme indiqué ci-dessous. Cliquez sur le bouton \"Ancrer" "\" pour définir l'ancre d'un nœud Control :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" @@ -4497,97 +4509,97 @@ msgstr "" "Vous pouvez faire glisser les nœuds pour les placer manuellement ou, pour un " "placement plus précis, utiliser les paramètres suivants :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "ScoreLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "``Layout`` : \"Center Top\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "``Margin`` :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "Left : ``-25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "Top : ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "Right : ``25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "Bottom : ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "Text : ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "MessageLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "``Layout`` : \"Center\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "Gauche : ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "Haut : ``-150``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "Droite : ``200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "Bas : ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "Text : ``Dodge the Creeps!``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "StartButton" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "``Layout`` : \"Center Bottom\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "Left : ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "Top : ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "Right : ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "Bottom : ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "Text : ``Start``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4599,11 +4611,11 @@ msgstr "" "appelé \"Xolonium-Regular.ttf\". Pour utiliser cette police, procédez comme " "suit pour chacun des trois nœuds ``Control`` :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "Sous \"Polices personnalisées\", choisissez \"Nouveau DynamicFont\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " @@ -4614,18 +4626,18 @@ msgstr "" "Vous devez également définir la taille de la police de caractères. Un " "réglage à \"64\" fonctionne bien." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "Ajoutez à présent ce script à ``HUD`` :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" "Le signal ``start_game`` indique au nœud ``Main`` que le bouton a été pressé." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " @@ -4635,7 +4647,7 @@ msgstr "" "message, tel que \"Get Ready\". Sur le ``MessageTimer``, mettez ``Wait " "Time`` sur ``2`` et la propriété ``One Shot`` sur \"On\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." @@ -4644,12 +4656,12 @@ msgstr "" "\" pendant 2 secondes, puis reviendra à l'écran de titre et affichera le " "bouton \"Start\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" "Cette fonction est appelée dans ``Main`` chaque fois que le score change." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." @@ -4657,11 +4669,11 @@ msgstr "" "Connectez le signal ``timeout()`` du ``MessageTimer`` et le signal " "``appuyé()`` du ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "Connecter le HUD au Main" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4674,7 +4686,7 @@ msgstr "" "L'arbre complet devrait ressembler à ceci, alors assurez-vous de ne rien " "manquer :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" @@ -4682,7 +4694,7 @@ msgstr "" "Nous devons maintenant connecter la fonctionnalité ``HUD``à notre script " "``Main``. Cela nécessite quelques ajouts à la scène ``Main`` :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." @@ -4690,7 +4702,7 @@ msgstr "" "Dans l'onglet Nœud, connectez le signal ``start_game`` du HUD à la fonction " "``new_game()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" @@ -4698,12 +4710,12 @@ msgstr "" "Dans ``new_game()``, mettez à jour l'affichage des scores et affichez le " "message \"Get Ready\" :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" "Dans ``game_over()`` nous devons appeler la fonction ``HUD`` correspondante :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" @@ -4711,7 +4723,7 @@ msgstr "" "Enfin, ajoutez ceci à ``on_ScoreTimer_timeout()`` pour que l'affichage reste " "synchronisé avec le changement de score :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." @@ -4720,11 +4732,11 @@ msgstr "" "\". Il vous sera demandé de sélectionner une scène principale, choisissez " "alors ``Main.tscn``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "Pour terminer" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " @@ -4735,12 +4747,12 @@ msgstr "" "pour améliorer l'expérience de jeu. N'hésitez pas à développer le gameplay " "avec vos propres idées." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "Arrière-plan" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4756,7 +4768,7 @@ msgstr "" "propriété : ``Color``. Choisissez une couleur que vous aimez et faites " "glisser la taille du ``ColorRect`` pour qu'il couvre l'écran." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." @@ -4764,11 +4776,11 @@ msgstr "" "Vous pouvez aussi ajouter une image de fond, si vous en avez une, en " "utilisant un nœud ``Sprite``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "Effets sonores" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4780,7 +4792,7 @@ msgstr "" "vous avez deux fichiers son : \"House In a Forest Loop.ogg\" pour la musique " "de fond, et \"gameover.wav\" pour quand le joueur perd." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4792,7 +4804,7 @@ msgstr "" "``DeathSound``. Sur chacun d'eux, cliquez sur la propriété ``Stream``, " "sélectionnez \"Charger\", et choisissez le fichier audio correspondant." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." @@ -4800,17 +4812,17 @@ msgstr "" "Pour jouer de la musique, ajouter ``$Music.play()`` dans la fonction " "``new_game()`` et ``$Music.stop()`` dans la fonction ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" "Enfin, ajoutez ``$DeathSound.play()`` dans la fonction ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Particules" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " @@ -4820,7 +4832,7 @@ msgstr "" "mouvement du joueur. Choisissez votre scène ``Player`` et ajoutez un nœud :" "ref:`Particles2D ` nommé ``Trail``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " @@ -4830,7 +4842,7 @@ msgstr "" "des particules. N'hésitez pas à expérimenter et à créer des effets " "différents. Pour l'effet dans cet exemple, utilisez les paramètres suivants :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" @@ -4838,7 +4850,7 @@ msgstr "" "Vous devez également créer un ``Material`` en cliquant sur ```` puis " "sur \"Nouveau ParticlesMaterial\". Les paramètres pour cela sont ci-dessous :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " @@ -4848,7 +4860,7 @@ msgstr "" "dégradé prenant l'alpha (transparence) du sprite de 0.5 (semi-transparent) à " "0.0 (totalement transparent)." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" @@ -4856,7 +4868,7 @@ msgstr "" "Cliquez sur \"Nouveau GradientTexture\", puis sous \"Gradient\", cliquez sur " "\"Nouveau Gradient\". Vous verrez une fenêtre comme celle-ci :" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4868,7 +4880,7 @@ msgstr "" "pour choisir la couleur. Pour la première couleur, réglez la valeur " "``A``(alpha) à environ la moitié. Pour la seconde, réglez à ``0``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." @@ -4876,11 +4888,11 @@ msgstr "" "Voir :ref:`Particles2D ` pour plus de détails " "sur l'utilisation des effets de particules." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "Fichiers du project" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -5378,7 +5390,7 @@ msgstr "" "et à des façons différentes de former les structures de vos jeux. Tout cela " "découle de leurs philosophies de conception respectives." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -5392,7 +5404,7 @@ msgstr "" "moteurs. Pour savoir si un moteur peut convenir à votre projet, vous devez " "l'essayer vous-même et comprendre sa conception et ses limites." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." @@ -5400,11 +5412,11 @@ msgstr "" "Veuillez regarder `Discover Godot 3, the Free game engine ` si vous cherchez un aperçu des fonctionnalités du moteur." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "Conception et composition orientées objet" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " @@ -5415,7 +5427,7 @@ msgstr "" "modèles de programmation stricts pour offrir un moyen intuitif de structurer " "votre jeu." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -5430,11 +5442,11 @@ msgstr "" "sauvegardez, et toutes les BrokenLanterns dans la ville se mettront à jour " "instantanément." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "En plus de cela, vous pouvez **hériter** de n'importe quelle scène." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -5447,7 +5459,7 @@ msgstr "" "de la concevoir en utilisant l'éditeur, en utilisant seulement le code, ou " "en mélangeant et en faisant correspondre les deux." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -5461,7 +5473,7 @@ msgstr "" "et le magicien se mettra également à jour. Ça vous aide à construire vos " "projets afin que leur structure corresponde à la conception du jeu." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -5474,7 +5486,7 @@ msgstr "" "le moteur comporte des éléments comme des formes géométriques de collision, " "ils sont l'exception et non la norme." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " @@ -5485,11 +5497,11 @@ msgstr "" "transformations ou la possibilité de dessiner des formes personnalisées et " "de faire un rendu avec un shader personnalisé." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "Forfait tout compris" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -5502,7 +5514,7 @@ msgstr "" "débogueur, d'un profileur, de la possibilité de rechargement à chaud local " "et sur des périphériques distants, etc." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -5515,7 +5527,7 @@ msgstr "" "pouvez en créer un, comme le `Tiled Map Importer `__." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -5527,10 +5539,11 @@ msgstr "" "conçus pour les besoins des développeurs et des designers de jeu, et sont " "étroitement intégrés au moteur et à l'éditeur." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 +#, fuzzy msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" "GDscript vous permet d'écrire du code simple en utilisant une syntaxe " @@ -5540,7 +5553,7 @@ msgstr "" "de code orienté gameplay grâce à des types intégrés tels que Vector et " "Colors." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " @@ -5551,7 +5564,7 @@ msgstr "" "Python (en utilisant le compilateur Cython) sans avoir à recompiler le " "moteur." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " @@ -5561,7 +5574,7 @@ msgstr "" "s'intégrant très bien avec l'éditeur. Vous pouvez glisser-déposer des noeuds " "ou des ressources dans le graphe pour créer de nouveaux blocs de code.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -5576,35 +5589,40 @@ msgstr "" "l'éditeur via du code dans le jeu. Cf. `L'éditeur Godot est un jeu Godot`_ " "ci-dessous." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#, fuzzy msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" "*Une machine à états proposée sous forme d'extension à l'éditeur par " "kubecz3k, vous permettant de gérer les états et les transitions visuellement*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "Libre" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#, fuzzy msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" "Godot propose un code source complètement libre sous **licence MIT.** Cela " "veut dire que toutes les technologies qui sont intégrées dans le moteur " "doivent être sous licence libre également. Pour la plupart, elles sont " "entièrement développées par les contributeurs." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#, fuzzy msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" "N'importe qui peut ajouter des outils propriétaires pour les besoins de " "leurs projets - ils ne seront tout simplement pas livrés avec le moteur. Il " @@ -5612,7 +5630,7 @@ msgstr "" "FBX. Mais n'importe lequel d'entre eux peut venir sous forme de plugins " "tiers à la place." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -5624,7 +5642,7 @@ msgstr "" "facilement les jeux car Godot affichera les erreurs avec une trace de la " "pile, même si elles proviennent du moteur lui-même." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." @@ -5632,11 +5650,11 @@ msgstr "" "Cela *n'affecte en rien le travail que vous faites avec Godot** : il n'y a " "aucune condition attachée au moteur ou à tout ce que vous en faites." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "Géré par une communauté" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -5650,7 +5668,7 @@ msgstr "" "focalisent souvent sur ce qui profitera d'abord au plus grand nombre " "d'utilisateurs." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -5665,11 +5683,11 @@ msgstr "" "des améliorations dans tous les coins du moteur en même temps dans chaque " "version majeure." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "L'éditeur Godot est un jeu Godot" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -5683,7 +5701,7 @@ msgstr "" "les mêmes scènes pour vos jeux, ou **construire des plugins et étendre " "l'éditeur.**" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." @@ -5692,9 +5710,10 @@ msgstr "" "l'éditeur lui-même est propulsé avec. Avec le mot-clé ``tool``, vous pouvez " "exécuter n'importe quel code de jeu dans l'éditeur." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 +#, fuzzy msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" @@ -5702,9 +5721,10 @@ msgstr "" "utilise les outils d'interface utilisateur de Godot pour son système de " "programmation par nœuds et pour le reste de l'interface.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 +#, fuzzy msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." @@ -5715,15 +5735,16 @@ msgstr "" "de créer des scripts avec les mêmes nœuds et API que vous utilisez dans vos " "projets." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "Moteurs 2D et 3D séparés" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 +#, fuzzy msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" "Godot propose des moteurs de rendu 2D et 3D dédiés. Du fait que **l'unité de " @@ -11883,9 +11904,9 @@ msgstr "Mot-clé" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -16216,8 +16237,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "Built-In" @@ -16368,10 +16389,11 @@ msgstr "" "besoin." #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:474 +#, fuzzy msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -17716,9 +17738,10 @@ msgid "Within single line initializer braces." msgstr "Dans les accolades d'initialisation monoligne." #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 +#, fuzzy msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" "L'exemple suivant montre une utilisation correcte des espaces, selon " "certaines des conventions mentionnées ci-dessus :" @@ -17966,28 +17989,28 @@ msgstr "Importeur de scènes Godot" msgid "Details on exporting" msgstr "Détails sur l'exportation" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "Désactiver des objets spécifiques" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -18080,59 +18103,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Il n'y a aucune restriction d'utilisation de Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 #, fuzzy msgid "Physics Properties" @@ -18195,6 +18165,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -18214,6 +18191,226 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Il n'y a aucune restriction d'utilisation de Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "Maillages" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Identifiants" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +#, fuzzy +msgid "Skeleton" +msgstr "Singletons" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animation" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animation du sprite" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +#, fuzzy +msgid "Action Lib" +msgstr "Action" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animation" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "Gestion des assets" @@ -18695,7 +18892,7 @@ msgstr "Traitement" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -24216,7 +24413,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -24259,7 +24456,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -24284,10 +24481,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -24366,7 +24563,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -24457,7 +24654,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -24577,18 +24774,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -24596,108 +24793,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "Taille fixe" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "Couleur de vertex" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "Utiliser comme albedo" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "Est SRGB" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -24706,261 +24903,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "Mode diffus" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "**Lambert :** n’est pas affecté par la dureté." -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "Mode spéculaire" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "Mode de fusion" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "Albedo" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -24969,22 +25167,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "Métallique" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -24992,24 +25190,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "Dureté" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -25017,11 +25215,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "Émission" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -25029,11 +25227,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -25041,11 +25239,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -25054,7 +25252,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -25062,22 +25260,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "Vernis transparent" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "Anisotropie" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -25085,11 +25283,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "Occlusion ambiante" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -25099,80 +25297,80 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Profondeur" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 #, fuzzy msgid "Transmission" msgstr "Transmission" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "Réfraction" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "Détail" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "UV1 et UV2" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -25180,17 +25378,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -25199,17 +25397,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "Priorité de rendu" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -25352,7 +25550,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -26647,7 +26845,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -26755,7 +26953,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -28018,303 +28216,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -28326,6 +28656,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -28473,6 +28804,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -28487,6 +28819,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -28522,14 +28855,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -28808,7 +29144,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -28948,8 +29284,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -29330,11 +29666,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -29364,11 +29701,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -29478,9 +29816,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -29566,7 +29904,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -29574,7 +29912,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -29610,8 +29948,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -29641,7 +29979,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -29677,7 +30016,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -29754,7 +30093,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -29780,10 +30119,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -29806,8 +30145,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -29853,7 +30192,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -29881,9 +30220,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -29898,15 +30237,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -29919,7 +30258,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -29956,7 +30295,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -29977,7 +30316,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -30020,9 +30359,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -30060,92 +30399,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -30155,37 +30494,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -30195,32 +30534,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -30229,19 +30568,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -30249,26 +30588,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -30276,7 +30615,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -30285,7 +30624,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -30294,20 +30633,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -30316,66 +30655,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -30385,31 +30724,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -30419,51 +30758,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -30471,23 +30810,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -30495,45 +30834,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -30541,7 +30880,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -30551,51 +30890,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -30603,13 +30942,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -30617,65 +30956,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -30683,7 +31022,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -30691,84 +31030,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -30777,24 +31116,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -30802,56 +31141,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -30859,14 +31198,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -30874,7 +31213,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -30884,49 +31223,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -30935,7 +31270,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -30944,19 +31279,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -30965,47 +31300,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -31013,53 +31348,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -31069,11 +31404,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -31086,57 +31421,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -31325,7 +31660,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -31338,7 +31673,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -31390,8 +31725,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -31576,8 +31911,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -31722,7 +32056,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -31888,7 +32222,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -31901,7 +32235,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -31916,7 +32250,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -31926,8 +32260,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -31940,7 +32274,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -32025,7 +32359,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -32089,30 +32423,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -32120,108 +32454,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -32229,18 +32563,18 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 #, fuzzy @@ -32248,32 +32582,32 @@ msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" "Ajouter un script au ``Mob`` et ajouter les variables membres suivantes :" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -32281,27 +32615,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -32311,7 +32645,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -32320,14 +32654,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -32336,32 +32670,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -32369,7 +32703,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -32379,54 +32713,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -32434,38 +32768,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -32473,29 +32807,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -32504,29 +32838,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -32535,13 +32869,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -32549,18 +32883,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -32568,40 +32902,40 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 #, fuzzy msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" "Ajouter un script au ``Mob`` et ajouter les variables membres suivantes :" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -32609,38 +32943,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -32649,32 +32983,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -32682,7 +33016,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -32690,13 +33024,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -32704,20 +33038,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -32726,20 +33060,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -32748,70 +33082,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -32821,11 +33156,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -32833,39 +33168,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -32874,68 +33209,68 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 #, fuzzy msgid "In this case, we want to respawn the target." msgstr "Dans ce cas, la valeur peut être lue à partir d'un *Port de données*." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -32945,34 +33280,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -32980,20 +33315,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -34005,6 +34340,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -35763,15 +36099,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -38603,12 +38956,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animation" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -40580,8 +40927,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -40788,9 +41135,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -44494,11 +44841,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -44526,7 +44873,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -44567,10 +44914,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -44627,7 +44974,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -44694,7 +45041,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -44703,7 +45050,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -44714,7 +45061,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -44722,7 +45069,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -44730,43 +45077,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -44775,17 +45122,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -44795,7 +45142,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -44806,7 +45153,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -44818,30 +45165,40 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 +#, fuzzy msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" +"Définit si le canevas sera redimensionné à la largeur et à la hauteur " +"spécifiées dans les paramètres du projet au démarrage. La valeur par défaut " +"est ``true``." #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -44852,7 +45209,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -44860,89 +45217,199 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." -msgstr "" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +#, fuzzy +msgid "Stretch Mode" +msgstr "Mode spéculaire" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +#, fuzzy +msgid "From scripts" +msgstr "Script de filtrage" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -45001,7 +45468,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -45737,10 +46204,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -46561,7 +47024,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "Mode de rendu" @@ -46786,7 +47249,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -46852,9 +47315,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -46932,7 +47395,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -47075,7 +47538,7 @@ msgstr "in vec4 **FRAGCOORD**" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -47119,7 +47582,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "in vec2 **UV**" @@ -47136,7 +47599,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "in vec4 **COLOR**" @@ -47272,7 +47735,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "sampler2D **SCREEN_TEXTURE**" @@ -47301,8 +47764,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "in vec2 **POINT_COORD**" @@ -47319,7 +47782,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "Light Built-Ins" @@ -47328,7 +47791,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "in vec3 **NORMAL**" @@ -47474,12 +47937,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "in bool **AT_LIGHT_PASS**" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -47543,7 +48006,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "sampler2D **TEXTURE**" @@ -47560,261 +48023,260 @@ msgid "Default 2D normal texture." msgstr "Texture 2D des normales par défaut." #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "in vec2 **TEXTURE_PIXEL_SIZE**" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "in vec2 **SCREEN_UV**" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "in vec2 **SCREEN_PIXEL_SIZE**" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "in vec2 **POSITION**" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "out vec2 **LIGHT_VEC**" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "out float **LIGHT_HEIGHT**" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "out vec4 **LIGHT_COLOR**" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "out vec2 **LIGHT_UV**" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "out vec4 **SHADOW_COLOR**" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "out vec4 **LIGHT**" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "**disable_force**" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "**disable_velocity**" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "out vec3 **VELOCITY**" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "out float **MASS**" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "out bool **ACTIVE**" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "in bool **RESTART**" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "out vec4 **CUSTOM**" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "out mat4 **TRANSFORM**" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "in float **LIFETIME**" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "in float **DELTA**" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "in uint **NUMBER**" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "in int **INDEX**" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "in mat4 **EMISSION_TRANSFORM**" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "in uint **RANDOM_SEED**" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -49720,6 +50182,1819 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr ":ref:`RigidBody2D ` (nommé ``Mob``)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Mise en place" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "Déplacement du joueur" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" +"Ajouter un script au ``Mob`` et ajouter les variables membres suivantes :" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "Ajouter un script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Il n'y a aucune restriction d'utilisation de Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "Ajouter un script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Ajouter une fonction" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Ajouter un script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Préparation du projet" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Extensions" @@ -55095,7 +57370,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -55140,9 +57415,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -55173,17 +57449,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -55201,6 +57478,61 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Tutoriel de ligne de commande" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +#, fuzzy +msgid "default: no" +msgstr "Environnement par défaut" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +#, fuzzy +msgid "default: yes" +msgstr "Fonctionnalités par défaut" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -57879,7 +60211,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -57939,16 +60271,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -#, fuzzy -msgid "Skeleton" -msgstr "Singletons" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -58080,7 +60407,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -58156,20 +60483,20 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 #, fuzzy -msgid "vertex color array" +msgid "Vertex color array" msgstr "Couleur de vertex" #: ../../docs/development/file_formats/tscn.rst:333 @@ -58181,16 +60508,17 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" -msgstr "" +#, fuzzy +msgid "Vertex index array" +msgstr "Couleur de vertex" #: ../../docs/development/file_formats/tscn.rst:339 msgid "" @@ -58226,8 +60554,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -58312,7 +60640,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -58655,10 +60983,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"En plus de cette documentation, vous pouvez également jeter un coup d’œil " +"aux différents `projets de démonstration de Godot `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/he.po b/weblate/he.po index a343eda276..cf5cafd0b3 100644 --- a/weblate/he.po +++ b/weblate/he.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-04-20 14:38+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3300,109 +3311,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3410,55 +3421,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3466,57 +3477,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3526,17 +3537,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3544,7 +3555,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3552,55 +3563,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3608,17 +3619,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3966,7 +3977,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3975,24 +3986,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4001,11 +4012,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4013,7 +4024,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4022,7 +4033,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4030,18 +4041,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4049,7 +4060,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4057,7 +4068,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4065,28 +4076,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4095,32 +4106,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4128,17 +4140,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4146,7 +4158,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4155,11 +4167,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4167,36 +4179,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8724,9 +8736,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12132,8 +12144,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12251,7 +12263,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13307,7 +13319,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13499,28 +13511,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13611,59 +13623,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "אין מגבלות שימוש בגודוט" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13723,6 +13682,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13742,6 +13708,222 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "אין מגבלות שימוש בגודוט" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "אנימציות" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "אנימציות" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14181,7 +14363,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19153,7 +19335,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19196,7 +19378,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19221,10 +19403,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19303,7 +19485,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19394,7 +19576,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19514,18 +19696,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19533,108 +19715,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19643,261 +19825,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19906,22 +20089,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19929,24 +20112,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19954,11 +20137,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19966,11 +20149,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19978,11 +20161,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19991,7 +20174,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19999,22 +20182,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20022,11 +20205,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20036,79 +20219,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20116,17 +20299,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20135,17 +20318,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20288,7 +20471,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21581,7 +21764,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21689,7 +21872,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22952,303 +23135,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23260,6 +23575,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23406,6 +23722,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23420,6 +23737,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23455,14 +23773,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23741,7 +24062,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23880,8 +24201,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24262,11 +24583,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24296,11 +24618,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24410,9 +24733,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24498,7 +24821,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24506,7 +24829,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24542,8 +24865,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24573,7 +24896,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24609,7 +24933,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24686,7 +25010,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24712,10 +25036,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24738,8 +25062,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24785,7 +25109,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24813,9 +25137,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24830,15 +25154,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24851,7 +25175,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24888,7 +25212,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24909,7 +25233,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24952,9 +25276,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24992,92 +25316,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25087,37 +25411,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25127,32 +25451,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25161,19 +25485,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25181,26 +25505,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25208,7 +25532,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25217,7 +25541,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25226,20 +25550,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25248,66 +25572,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25317,31 +25641,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25351,51 +25675,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25403,23 +25727,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25427,45 +25751,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25473,7 +25797,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25483,51 +25807,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25535,13 +25859,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25549,65 +25873,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25615,7 +25939,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25623,84 +25947,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25709,24 +26033,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25734,56 +26058,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25791,14 +26115,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25806,7 +26130,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25816,49 +26140,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25867,7 +26187,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25876,19 +26196,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25897,47 +26217,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25945,53 +26265,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26001,11 +26321,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26018,57 +26338,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26255,7 +26575,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26268,7 +26588,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26320,8 +26640,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26504,8 +26824,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26650,7 +26969,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26816,7 +27135,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26829,7 +27148,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26844,7 +27163,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26854,8 +27173,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26868,7 +27187,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26953,7 +27272,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27017,30 +27336,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27048,108 +27367,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27157,49 +27476,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27207,27 +27526,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27237,7 +27556,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27246,14 +27565,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27262,32 +27581,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27295,7 +27614,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27305,54 +27624,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27360,38 +27679,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27399,29 +27718,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27430,29 +27749,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27461,13 +27780,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27475,18 +27794,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27494,38 +27813,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27533,38 +27852,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27573,32 +27892,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27606,7 +27925,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27614,13 +27933,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27628,20 +27947,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27650,20 +27969,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27672,70 +27991,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27745,11 +28065,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27757,39 +28077,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27798,67 +28118,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27868,34 +28188,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27903,20 +28223,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28927,6 +29247,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30682,15 +31003,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33521,12 +33859,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35498,8 +35830,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35706,9 +36038,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39405,11 +39737,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39437,7 +39769,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39478,10 +39810,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39538,7 +39870,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39605,7 +39937,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39614,7 +39946,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39625,7 +39957,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39633,7 +39965,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39641,43 +39973,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39686,17 +40018,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39706,7 +40038,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39717,7 +40049,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39729,30 +40061,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39763,7 +40101,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39771,89 +40109,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39912,7 +40358,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40648,10 +41094,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41472,7 +41914,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41697,7 +42139,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41763,9 +42205,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41843,7 +42285,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41986,7 +42428,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42030,7 +42472,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42047,7 +42489,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42182,7 +42624,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42211,8 +42653,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42229,7 +42671,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42238,7 +42680,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42384,12 +42826,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42453,7 +42895,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42470,261 +42912,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44630,6 +45071,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "אין מגבלות שימוש בגודוט" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49998,7 +52242,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50043,9 +52287,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50076,17 +52321,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50104,6 +52350,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52664,7 +54962,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52724,15 +55022,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52864,7 +55158,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52938,19 +55232,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52962,15 +55256,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53007,8 +55301,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53090,7 +55384,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53434,7 +55728,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/hu.po b/weblate/hu.po index 533800d8a8..6513f7dfe2 100644 --- a/weblate/hu.po +++ b/weblate/hu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-17 16:39+0000\n" "Last-Translator: Árpád Horváth \n" "Language-Team: Hungarian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3355,109 +3366,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3465,55 +3476,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3521,57 +3532,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3581,17 +3592,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3599,7 +3610,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3607,55 +3618,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Részecskék" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3663,17 +3674,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4020,7 +4031,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4029,24 +4040,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4055,11 +4066,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4067,7 +4078,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4076,7 +4087,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4084,18 +4095,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4103,7 +4114,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4111,7 +4122,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4119,28 +4130,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4149,32 +4160,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4182,17 +4194,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4200,7 +4212,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4209,11 +4221,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4221,36 +4233,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8777,9 +8789,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12182,8 +12194,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12301,7 +12313,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13356,7 +13368,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13548,28 +13560,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13660,59 +13672,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Nincs felhasználási korlátozás a Godot-ra" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13772,6 +13731,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13791,6 +13757,221 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Nincs felhasználási korlátozás a Godot-ra" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animáció" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animáció" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14230,7 +14411,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19202,7 +19383,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19245,7 +19426,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19270,10 +19451,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19352,7 +19533,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19443,7 +19624,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19563,18 +19744,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19582,108 +19763,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19692,261 +19873,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19955,22 +20137,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19978,24 +20160,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20003,11 +20185,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20015,11 +20197,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20027,11 +20209,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20040,7 +20222,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20048,22 +20230,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20071,11 +20253,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20085,79 +20267,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Mélység" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20165,17 +20347,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20184,17 +20366,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20337,7 +20519,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21630,7 +21812,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21738,7 +21920,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23001,303 +23183,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23309,6 +23623,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23455,6 +23770,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23469,6 +23785,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23504,14 +23821,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23790,7 +24110,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23929,8 +24249,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24311,11 +24631,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24345,11 +24666,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24459,9 +24781,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24547,7 +24869,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24555,7 +24877,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24591,8 +24913,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24622,7 +24944,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24658,7 +24981,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24735,7 +25058,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24761,10 +25084,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24787,8 +25110,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24834,7 +25157,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24862,9 +25185,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24879,15 +25202,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24900,7 +25223,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24937,7 +25260,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24958,7 +25281,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25001,9 +25324,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25041,92 +25364,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25136,37 +25459,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25176,32 +25499,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25210,19 +25533,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25230,26 +25553,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25257,7 +25580,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25266,7 +25589,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25275,20 +25598,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25297,66 +25620,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25366,31 +25689,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25400,51 +25723,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25452,23 +25775,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25476,45 +25799,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25522,7 +25845,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25532,51 +25855,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25584,13 +25907,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25598,65 +25921,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25664,7 +25987,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25672,84 +25995,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25758,24 +26081,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25783,56 +26106,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25840,14 +26163,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25855,7 +26178,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25865,49 +26188,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25916,7 +26235,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25925,19 +26244,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25946,47 +26265,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25994,53 +26313,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26050,11 +26369,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26067,57 +26386,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26304,7 +26623,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26317,7 +26636,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26369,8 +26688,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26553,8 +26872,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26699,7 +27017,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26865,7 +27183,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26878,7 +27196,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26893,7 +27211,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26903,8 +27221,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26917,7 +27235,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27002,7 +27320,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27066,30 +27384,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27097,108 +27415,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27206,49 +27524,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27256,27 +27574,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27286,7 +27604,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27295,14 +27613,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27311,32 +27629,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27344,7 +27662,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27354,54 +27672,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27409,38 +27727,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27448,29 +27766,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27479,29 +27797,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27510,13 +27828,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27524,18 +27842,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27543,38 +27861,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27582,38 +27900,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27622,32 +27940,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27655,7 +27973,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27663,13 +27981,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27677,20 +27995,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27699,20 +28017,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27721,70 +28039,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27794,11 +28113,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27806,39 +28125,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27847,67 +28166,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27917,34 +28236,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27952,20 +28271,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28976,6 +29295,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30731,15 +31051,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33570,12 +33907,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animáció" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35547,8 +35878,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35755,9 +36086,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39454,11 +39785,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39486,7 +39817,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39527,10 +39858,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39587,7 +39918,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39654,7 +39985,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39663,7 +39994,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39674,7 +40005,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39682,7 +40013,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39690,43 +40021,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39735,17 +40066,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39755,7 +40086,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39766,7 +40097,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39778,30 +40109,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39812,7 +40149,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39820,89 +40157,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39961,7 +40406,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40697,10 +41142,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41521,7 +41962,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41746,7 +42187,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41812,9 +42253,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41892,7 +42333,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42035,7 +42476,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42079,7 +42520,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42096,7 +42537,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42231,7 +42672,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42260,8 +42701,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42278,7 +42719,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42287,7 +42728,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42433,12 +42874,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42502,7 +42943,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42519,261 +42960,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44679,6 +45119,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Nincs felhasználási korlátozás a Godot-ra" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Bővítmények" @@ -50047,7 +52290,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50092,9 +52335,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50125,17 +52369,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50153,6 +52398,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52712,7 +55009,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52771,15 +55068,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52910,7 +55203,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52984,19 +55277,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53008,15 +55301,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53053,8 +55346,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53134,7 +55427,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53477,10 +55770,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Ezen dokumentáció mellett megtekinthető még különböző `Godot demo projects " +"`_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/id.po b/weblate/id.po index f2fc29c2a0..ce1eafd88e 100644 --- a/weblate/id.po +++ b/weblate/id.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-30 03:38+0000\n" "Last-Translator: Khairul Hidayat \n" "Language-Team: Indonesian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3350,109 +3361,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3460,55 +3471,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3516,57 +3527,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3576,17 +3587,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3594,7 +3605,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3602,55 +3613,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3658,17 +3669,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4015,7 +4026,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4024,24 +4035,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4050,11 +4061,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4062,7 +4073,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4071,7 +4082,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4079,18 +4090,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4098,7 +4109,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4106,7 +4117,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4114,28 +4125,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4144,32 +4155,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4177,17 +4189,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4195,7 +4207,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4204,11 +4216,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4216,36 +4228,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8772,9 +8784,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12176,8 +12188,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12295,7 +12307,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13350,7 +13362,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13542,28 +13554,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13654,58 +13666,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13765,6 +13725,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13784,6 +13751,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14223,7 +14403,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19195,7 +19375,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19238,7 +19418,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19263,10 +19443,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19345,7 +19525,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19436,7 +19616,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19556,18 +19736,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19575,108 +19755,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19685,261 +19865,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19948,22 +20129,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19971,24 +20152,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19996,11 +20177,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20008,11 +20189,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20020,11 +20201,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20033,7 +20214,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20041,22 +20222,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20064,11 +20245,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20078,79 +20259,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20158,17 +20339,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20177,17 +20358,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20330,7 +20511,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21623,7 +21804,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21731,7 +21912,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22994,303 +23175,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23302,6 +23615,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23448,6 +23762,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23462,6 +23777,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23497,14 +23813,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23783,7 +24102,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23922,8 +24241,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24304,11 +24623,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24338,11 +24658,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24452,9 +24773,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24540,7 +24861,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24548,7 +24869,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24584,8 +24905,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24615,7 +24936,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24651,7 +24973,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24728,7 +25050,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24754,10 +25076,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24780,8 +25102,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24827,7 +25149,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24855,9 +25177,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24872,15 +25194,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24893,7 +25215,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24930,7 +25252,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24951,7 +25273,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24994,9 +25316,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25034,92 +25356,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25129,37 +25451,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25169,32 +25491,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25203,19 +25525,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25223,26 +25545,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25250,7 +25572,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25259,7 +25581,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25268,20 +25590,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25290,66 +25612,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25359,31 +25681,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25393,51 +25715,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25445,23 +25767,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25469,45 +25791,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25515,7 +25837,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25525,51 +25847,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25577,13 +25899,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25591,65 +25913,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25657,7 +25979,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25665,84 +25987,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25751,24 +26073,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25776,56 +26098,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25833,14 +26155,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25848,7 +26170,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25858,49 +26180,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25909,7 +26227,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25918,19 +26236,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25939,47 +26257,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25987,53 +26305,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26043,11 +26361,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26060,57 +26378,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26297,7 +26615,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26310,7 +26628,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26362,8 +26680,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26546,8 +26864,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26692,7 +27009,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26858,7 +27175,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26871,7 +27188,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26886,7 +27203,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26896,8 +27213,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26910,7 +27227,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26995,7 +27312,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27059,30 +27376,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27090,108 +27407,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27199,49 +27516,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27249,27 +27566,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27279,7 +27596,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27288,14 +27605,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27304,32 +27621,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27337,7 +27654,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27347,54 +27664,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27402,38 +27719,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27441,29 +27758,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27472,29 +27789,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27503,13 +27820,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27517,18 +27834,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27536,38 +27853,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27575,38 +27892,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27615,32 +27932,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27648,7 +27965,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27656,13 +27973,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27670,20 +27987,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27692,20 +28009,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27714,70 +28031,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27787,11 +28105,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27799,39 +28117,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27840,67 +28158,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27910,34 +28228,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27945,20 +28263,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28969,6 +29287,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30724,15 +31043,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33563,12 +33899,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35540,8 +35870,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35748,9 +36078,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39447,11 +39777,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39479,7 +39809,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39520,10 +39850,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39580,7 +39910,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39647,7 +39977,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39656,7 +39986,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39667,7 +39997,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39675,7 +40005,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39683,43 +40013,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39728,17 +40058,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39748,7 +40078,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39759,7 +40089,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39771,30 +40101,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39805,7 +40141,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39813,89 +40149,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39954,7 +40398,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40690,10 +41134,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41514,7 +41954,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41739,7 +42179,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41805,9 +42245,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41885,7 +42325,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42028,7 +42468,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42072,7 +42512,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42089,7 +42529,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42224,7 +42664,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42253,8 +42693,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42271,7 +42711,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42280,7 +42720,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42426,12 +42866,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42495,7 +42935,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42512,261 +42952,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44672,6 +45111,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50040,7 +52281,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50085,9 +52326,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50118,17 +52360,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50146,6 +52389,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52705,7 +55000,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52764,15 +55059,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52903,7 +55194,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52977,19 +55268,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53001,15 +55292,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53046,8 +55337,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53127,7 +55418,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53470,10 +55761,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Sebagai tambahan untuk dokumentasi ini, Anda mungkin juga ingin melihat " +"berbagai `proyek demo Godot `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/it.po b/weblate/it.po index e7a35d33c2..cd40b613b9 100644 --- a/weblate/it.po +++ b/weblate/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-12 06:39+0000\n" "Last-Translator: Mario Rossi \n" "Language-Team: Italian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3623,109 +3634,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3733,55 +3744,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3789,57 +3800,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3849,17 +3860,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3867,7 +3878,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3875,55 +3886,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3931,17 +3942,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4288,7 +4299,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4297,24 +4308,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4323,11 +4334,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4335,7 +4346,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4344,7 +4355,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4352,18 +4363,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4371,7 +4382,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4379,7 +4390,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4387,28 +4398,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4417,32 +4428,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4450,17 +4462,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4468,7 +4480,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4477,11 +4489,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4489,36 +4501,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -9045,9 +9057,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12453,8 +12465,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12572,7 +12584,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13627,7 +13639,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13819,28 +13831,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13931,59 +13943,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Non ci sono restrizioni di utilizzo per Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -14043,6 +14002,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -14062,6 +14028,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Non ci sono restrizioni di utilizzo per Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14501,7 +14681,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19473,7 +19653,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19516,7 +19696,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19541,10 +19721,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19623,7 +19803,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19714,7 +19894,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19834,18 +20014,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19853,108 +20033,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19963,261 +20143,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20226,22 +20407,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20249,24 +20430,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20274,11 +20455,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20286,11 +20467,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20298,11 +20479,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20311,7 +20492,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20319,22 +20500,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20342,11 +20523,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20356,79 +20537,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20436,17 +20617,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20455,17 +20636,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20608,7 +20789,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21901,7 +22082,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -22009,7 +22190,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23272,303 +23453,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23580,6 +23893,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23726,6 +24040,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23740,6 +24055,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23775,14 +24091,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -24061,7 +24380,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24200,8 +24519,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24582,11 +24901,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24616,11 +24936,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24730,9 +25051,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24818,7 +25139,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24826,7 +25147,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24862,8 +25183,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24893,7 +25214,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24929,7 +25251,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -25006,7 +25328,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -25032,10 +25354,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -25058,8 +25380,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -25105,7 +25427,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -25133,9 +25455,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -25150,15 +25472,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -25171,7 +25493,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25208,7 +25530,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25229,7 +25551,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25272,9 +25594,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25312,92 +25634,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25407,37 +25729,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25447,32 +25769,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25481,19 +25803,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25501,26 +25823,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25528,7 +25850,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25537,7 +25859,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25546,20 +25868,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25568,66 +25890,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25637,31 +25959,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25671,51 +25993,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25723,23 +26045,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25747,45 +26069,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25793,7 +26115,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25803,51 +26125,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25855,13 +26177,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25869,65 +26191,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25935,7 +26257,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25943,84 +26265,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -26029,24 +26351,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -26054,56 +26376,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -26111,14 +26433,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -26126,7 +26448,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -26136,49 +26458,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26187,7 +26505,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26196,19 +26514,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26217,47 +26535,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26265,53 +26583,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26321,11 +26639,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26338,57 +26656,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26575,7 +26893,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26588,7 +26906,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26640,8 +26958,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26824,8 +27142,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26970,7 +27287,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -27136,7 +27453,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -27149,7 +27466,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -27164,7 +27481,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -27174,8 +27491,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27188,7 +27505,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27273,7 +27590,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27337,30 +27654,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27368,108 +27685,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27477,49 +27794,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27527,27 +27844,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27557,7 +27874,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27566,14 +27883,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27582,32 +27899,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27615,7 +27932,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27625,54 +27942,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27680,38 +27997,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27719,29 +28036,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27750,29 +28067,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27781,13 +28098,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27795,18 +28112,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27814,38 +28131,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27853,38 +28170,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27893,32 +28210,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27926,7 +28243,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27934,13 +28251,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27948,20 +28265,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27970,20 +28287,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27992,70 +28309,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -28065,11 +28383,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -28077,39 +28395,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -28118,67 +28436,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28188,34 +28506,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28223,20 +28541,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29247,6 +29565,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -31002,15 +31321,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33841,12 +34177,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35818,8 +36148,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -36026,9 +36356,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39725,11 +40055,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39757,7 +40087,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39798,10 +40128,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39858,7 +40188,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39925,7 +40255,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39934,7 +40264,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39945,7 +40275,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39953,7 +40283,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39961,43 +40291,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -40006,17 +40336,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -40026,7 +40356,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -40037,7 +40367,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -40049,30 +40379,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -40083,7 +40419,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -40091,89 +40427,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40232,7 +40676,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40968,10 +41412,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41792,7 +42232,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -42017,7 +42457,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -42083,9 +42523,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -42163,7 +42603,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42306,7 +42746,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42350,7 +42790,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42367,7 +42807,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42502,7 +42942,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42531,8 +42971,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42549,7 +42989,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42558,7 +42998,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42704,12 +43144,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42773,7 +43213,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42790,261 +43230,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44950,6 +45389,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Non ci sono restrizioni di utilizzo per Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50318,7 +52560,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50363,9 +52605,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50396,17 +52639,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50424,6 +52668,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52984,7 +55280,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -53043,15 +55339,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -53182,7 +55474,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53256,19 +55548,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53280,15 +55572,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53325,8 +55617,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53407,7 +55699,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53750,10 +56042,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"In aggiunta a questa documentazione è possibile dare un'occhiata anche ai " +"vari `Progetti dimostativi (Godot demo projects `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/ja.po b/weblate/ja.po index 629cfbd14f..514b8ddb48 100644 --- a/weblate/ja.po +++ b/weblate/ja.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-15 22:40+0000\n" "Last-Translator: yu tang <0011solo@gmail.com>\n" "Language-Team: Japanese ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3282,109 +3293,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3392,55 +3403,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3448,57 +3459,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3508,17 +3519,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3526,7 +3537,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3534,55 +3545,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3590,17 +3601,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3948,7 +3959,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3957,24 +3968,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3983,11 +3994,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3995,7 +4006,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4004,7 +4015,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4012,18 +4023,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4031,7 +4042,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4039,7 +4050,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4047,28 +4058,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4077,32 +4088,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "リソース" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4110,17 +4123,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4128,7 +4141,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4137,11 +4150,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4149,36 +4162,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8705,9 +8718,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12109,8 +12122,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12228,7 +12241,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13283,7 +13296,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13475,28 +13488,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13587,58 +13600,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13698,6 +13659,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13717,6 +13685,221 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "アニメーション" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "アニメーション" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "アニメーション" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14156,7 +14339,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19128,7 +19311,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19171,7 +19354,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19196,10 +19379,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19278,7 +19461,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19369,7 +19552,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19489,18 +19672,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19508,108 +19691,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19618,261 +19801,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19881,22 +20065,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19904,24 +20088,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19929,11 +20113,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19941,11 +20125,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19953,11 +20137,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19966,7 +20150,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19974,22 +20158,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19997,11 +20181,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20011,79 +20195,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "奥行き" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20091,17 +20275,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20110,17 +20294,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20263,7 +20447,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21556,7 +21740,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21664,7 +21848,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22927,303 +23111,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23235,6 +23551,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23381,6 +23698,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23395,6 +23713,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23430,14 +23749,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23716,7 +24038,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23855,8 +24177,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24237,11 +24559,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24271,11 +24594,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24385,9 +24709,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24473,7 +24797,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24481,7 +24805,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24517,8 +24841,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24548,7 +24872,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24584,7 +24909,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24661,7 +24986,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24687,10 +25012,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24713,8 +25038,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24760,7 +25085,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24788,9 +25113,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24805,15 +25130,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24826,7 +25151,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24863,7 +25188,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24884,7 +25209,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24927,9 +25252,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24967,92 +25292,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25062,37 +25387,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25102,32 +25427,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25136,19 +25461,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25156,26 +25481,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25183,7 +25508,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25192,7 +25517,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25201,20 +25526,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25223,66 +25548,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25292,31 +25617,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25326,51 +25651,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25378,23 +25703,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25402,45 +25727,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25448,7 +25773,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25458,51 +25783,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25510,13 +25835,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25524,65 +25849,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25590,7 +25915,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25598,84 +25923,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25684,24 +26009,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25709,56 +26034,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25766,14 +26091,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25781,7 +26106,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25791,49 +26116,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25842,7 +26163,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25851,19 +26172,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25872,47 +26193,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25920,53 +26241,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25976,11 +26297,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25993,57 +26314,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26230,7 +26551,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26243,7 +26564,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26295,8 +26616,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26479,8 +26800,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26625,7 +26945,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26791,7 +27111,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26804,7 +27124,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26819,7 +27139,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26829,8 +27149,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26843,7 +27163,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26928,7 +27248,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26992,30 +27312,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27023,108 +27343,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27132,49 +27452,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27182,27 +27502,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27212,7 +27532,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27221,14 +27541,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27237,32 +27557,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27270,7 +27590,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27280,54 +27600,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27335,38 +27655,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27374,29 +27694,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27405,29 +27725,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27436,13 +27756,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27450,18 +27770,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27469,38 +27789,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27508,38 +27828,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27548,32 +27868,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27581,7 +27901,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27589,13 +27909,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27603,20 +27923,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27625,20 +27945,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27647,70 +27967,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27720,11 +28041,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27732,39 +28053,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27773,67 +28094,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27843,34 +28164,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27878,20 +28199,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28902,6 +29223,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30657,15 +30979,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33496,12 +33835,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "アニメーション" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35473,8 +35806,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35681,9 +36014,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39380,11 +39713,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39412,7 +39745,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39453,10 +39786,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39513,7 +39846,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39580,7 +39913,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39589,7 +39922,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39600,7 +39933,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39608,7 +39941,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39616,43 +39949,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39661,17 +39994,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39681,7 +40014,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39692,7 +40025,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39704,30 +40037,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39738,7 +40077,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39746,89 +40085,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39887,7 +40334,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40623,10 +41070,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41447,7 +41890,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41672,7 +42115,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41738,9 +42181,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41818,7 +42261,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41961,7 +42404,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42005,7 +42448,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42022,7 +42465,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42157,7 +42600,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42186,8 +42629,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42204,7 +42647,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42213,7 +42656,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42359,12 +42802,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42428,7 +42871,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42445,261 +42888,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44605,6 +45047,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "プラグイン" @@ -49973,7 +52217,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50018,9 +52262,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50051,17 +52296,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50079,6 +52325,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52638,7 +54936,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52698,15 +54996,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52838,7 +55132,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52912,19 +55206,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52936,15 +55230,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52981,8 +55275,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53063,7 +55357,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53407,7 +55701,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/ko.po b/weblate/ko.po index 184336e7e0..f54d870024 100644 --- a/weblate/ko.po +++ b/weblate/ko.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-18 12:48+0000\n" "Last-Translator: 송태섭 \n" "Language-Team: Korean ` 노드를 추가하고 ``HUD`` 라고 이름지으세요. \"HUD\"는 " "\"heads-up display\"의 약자로, 정보가 게임 화면 앞에 덮어씌우는 방식입니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:828 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:833 msgid "" "The :ref:`CanvasLayer ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " @@ -4087,23 +4099,23 @@ msgstr "" "들을 그릴수 있게 해주고, 이로써 보여지는 정보가 플레이어나 적과 같은 게임 요" "소들에 의해 가려지지 않게 만듭니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "HUD는 다음의 정보들을 보여줍니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "점수, ``ScoreTimer`` 가 바꿈." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "메시지, \"Game Over\"나 \"Get Ready!\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "게임을 시작하기 위한 \"Start\" 버튼." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -4113,27 +4125,27 @@ msgstr "" "기 위해, 우리는 두 가지 형식의 :ref:`Control ` 노드를 쓸겁니" "다: :ref:`Label ` 과 :ref:`Button ` 입니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "다음에 맞춰 ``HUD`` 노드의 자식으로 추가하세요:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "``ScoreLabel`` 로 이름지은 :ref:`Label `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "``MessageLabel`` 로 이름지은 :ref:`Label `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "``StartButton`` 으로 이름지은 :ref:`Button `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "``MessageTimer`` 로 이름지은 :ref:`Timer `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -4149,7 +4161,7 @@ msgstr "" "냅니다. 더 자세한 설명은 :ref:`doc_design_interfaces_with_the_control_nodes` " "를 참고하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" @@ -4157,7 +4169,7 @@ msgstr "" "하단에 보이는 대로 노드를 정렬하세요. \"Anchor\" 버튼을 클릭해 컨트롤 노드의 " "앵커를 설정하세요:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" @@ -4165,97 +4177,97 @@ msgstr "" "당신은 노드들을 드래그해서 수동으로 놓을 수도 있습니다, 혹은 더 정확한 방법으" "로는, 다음의 설정을 사용하세요:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "ScoreLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "``레이아웃``: \"Center Top\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "``Margin``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "Left: ``-25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "Top: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "Right: ``25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "Bottom: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "Text: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "MessageLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "``레이아웃``: \"Center\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "Left: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "Top: ``-150``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "Right: ``200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "Bottom: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "Text: ``Dodge the Creeps!``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "StartButton" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "``레이아웃``: \"Center Bottom\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "Left: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "Top: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "Right: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "Bottom: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "Text: ``Start``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4266,11 +4278,11 @@ msgstr "" "\"Xolonium-Regular.ttf\"라는 글꼴 파일이 있습니다, 사용하려면, 3개의 " "``Control`` 노드에 다음과 같이 해야합니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "\"Custom Fonts\" 에서, \"새 DynamicFont\"를 선택하세요" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " @@ -4280,17 +4292,17 @@ msgstr "" "\"Xolonium-Regular.ttf\" 파일을 선택하세요. 또한 폰트의 ``Size`` 도 설정해야" "합니다. ``64`` 정도가 좋습니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "이제 ``HUD`` 에 이 스크립트를 추가하세요:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "``start_game`` 시그널은 ``Main`` 노드에게 버튼이 눌려졌음을 알립니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " @@ -4300,7 +4312,7 @@ msgstr "" "\" 처럼 말이죠. ``MessageTimer`` 에서, ``WaitTime`` 을 ``2`` 로 설정하고 " "``OneShot`` 속성을 \"On\"으로 하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." @@ -4308,11 +4320,11 @@ msgstr "" "이 함수는 플레이어가 패배했을 때 호출됩니다. 이것은 2초동안 \"Game Over\"를 " "보여주고, 타이틀 화면으로 돌아와서 \"Start\" 버튼을 보여줍니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "이 함수는 점수가 변경될 때마다 ``Main`` 에서 호출됩니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." @@ -4320,11 +4332,11 @@ msgstr "" "``MessageTimer`` 의 ``timeout()`` 시그널과 ``StartButton`` 의 ``pressed()`` " "를 연결하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "메인에 HUD를 연결하기" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4336,7 +4348,7 @@ msgstr "" "래에 위치시킵니다. 모든 트리는 이렇게 되어야 하므로, 놓친 것이 없는지 확인해" "보세요:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" @@ -4344,14 +4356,14 @@ msgstr "" "이제 ``HUD`` 기능을 ``Main`` 스크립트에 연결할겁니다. 여기에는 ``Main`` 씬에 " "추가적인 것이 요구됩니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" "노드 탭에서, HUD의 ``start_game`` 시그널을 ``new_game()`` 함수에 연결하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" @@ -4359,11 +4371,11 @@ msgstr "" "``new_game()`` 에서, 점수 화면을 업데이트하고 \"Get Ready\" 메시지를 보이게 " "합니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "``game_over()`` 에서는, 일치하는 ``HUD`` 함수를 호출해야합니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" @@ -4371,7 +4383,7 @@ msgstr "" "마지막으로, ``_on_ScoreTimer_timeout()`` 를 추가해서 점수가 바뀌는 것과 일치" "한 화면을 유지하도록 합니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." @@ -4379,11 +4391,11 @@ msgstr "" "이제 실행할 준비가 끝났습니다! \"프로젝트 실행\" 버튼을 누르세요. 아마 메인 " "씬을 선택하라고 물어볼 겁니다, ``Main.tscn`` 을 골라줍시다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "마무리 작업" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " @@ -4393,12 +4405,12 @@ msgstr "" "을 향상시킬 \"주스\"를 추가하는 것입니다. 독창적인 아이디어로 자유롭게 게임 " "플레이를 확장시켜보세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "배경" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4413,18 +4425,18 @@ msgstr "" "``ColorRect`` 는 오직 하나의 속성만 가지고 있습니다: ``Color`` 입니다. 원하" "는 색깔을 고르고 ``ColorRect`` 의 크기를 조절해 화면을 덮도록 만듭시다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" "또한 ``Sprite`` 노드를 사용해서 갖고 있는 배경 사진을 추가하실수도 있습니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "사운드 이펙트" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4436,7 +4448,7 @@ msgstr "" "Loop.ogg\"는 배경 음악으로, \"gameover.wav\"는 플레이어가 죽었을 때 쓰면 됩니" "다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4448,7 +4460,7 @@ msgstr "" "로 이름지으세요. 각각에서, ``Stream`` 속성을 클릭하시고 \"Load\"를 선택해서 " "이름에 맞는 오디오 파일을 선택하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." @@ -4456,17 +4468,17 @@ msgstr "" "음악을 실행시키려면, ``new_game()`` 함수에 ``$Music.play()`` 를 추가하고 " "``game_over()`` 함수에 ``$Music.stop()`` 을 추가하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" "마지막으로, ``game_over()`` 함수에 ``$DeathSound.play()`` 를 추가하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "파티클" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " @@ -4476,7 +4488,7 @@ msgstr "" "씬을 선택하고 :ref:`Particles2D ` 노드를 추가하고 " "``Trail`` 이라고 이름지으세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " @@ -4486,7 +4498,7 @@ msgstr "" "들고 자유롭게 경험해보세요. 이 예시의 이펙트를 위해서는, 다음의 설정을 사용하" "세요:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" @@ -4494,7 +4506,7 @@ msgstr "" "당신은 또한 ```` 에서 \"새 ParticlesMaterial\"을 클릭해서 ``Material`` " "을 추가할 수도 있습니다. 이 설정은 다음과 같습니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " @@ -4503,7 +4515,7 @@ msgstr "" "\"Color Ramp\" 설정에 그라디언트를 만들려면, 알파 (투명도)를 0.5 (반투명) 에" "서 0.0 (완전 투명) 으로 설정하는 그라디언트가 필요합니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" @@ -4511,7 +4523,7 @@ msgstr "" "\"새 GradientTexture\"를 클릭하고, \"Gradient\" 아래에, \"새 Gradient\"를 클" "릭하세요. 이렇게 생긴 창이 뜰 것입니다:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4523,7 +4535,7 @@ msgstr "" "절반으로 설정합니다. 두 번째 색상으로 \n" " ``0`` 으로 끝까지 설정합니다." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." @@ -4531,11 +4543,11 @@ msgstr "" "파티클 이펙트를 사용하는 더 많은 정보는 :ref:`Particles2D " "` 를 참고하세요." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "프로젝트 파일" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4987,7 +4999,7 @@ msgstr "" "구조를 형성하는 다른 방법과 다른 워크플로우를 하게 만듭니다. 이 모든 것은 각" "기 다른 디자인 철학에서 생겨납니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -5000,7 +5012,7 @@ msgstr "" "니다. 어떤 엔진이라도 당신의 프로젝트에 잘 맞들어지는지 알기 위해선, 당신이 " "스스로 시도하고 그것의 디자인과 한계를 이해해야합니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." @@ -5008,11 +5020,11 @@ msgstr "" "엔진의 기능에 관한 개요를 보고 싶다면 `Discover Godot 3, the Free game " "engine `_ 를 봐주세요." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "객체 지향 디자인과 구성" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " @@ -5022,7 +5034,7 @@ msgstr "" "갖고 있습니다. 이것으로 엄격한 프로그래밍 패턴을 피하고 직관적인 방법으로 게" "임을 구성하도록 만들었습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -5036,11 +5048,11 @@ msgstr "" "이는 빛의 색을 바꾸고, 저장해서, 도시의 모든 고장난 전봇대가 즉각적으로 업데" "이트될 것입니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "무엇보다도, 당신이 어떤 씬에서든지 **상속하는 것** 이 가능합니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -5052,7 +5064,7 @@ msgstr "" "섞어서 일치시켜서 자유롭게 디자인한다는 경우를 제외하면 클래스가 마치 순수한 " "코드처럼 작동합니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -5065,7 +5077,7 @@ msgstr "" "캐릭터를 수정하면 마법사도 이를 업데이트합니다. 이것은 당신이 프로젝트를 만들" "면서 프로젝트 구조가 게임 디자인에 일치하도록 도와줍니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -5077,7 +5089,7 @@ msgstr "" "서 노드 클래스까지 상속합니다. 비록 엔진이 충돌 모양같은 구성 요소를 포함하지" "만, 이들은 예외이고, 표준이 아닙니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " @@ -5087,11 +5099,11 @@ msgstr "" "을 가지고 있습니다, 예를들면 변환이나 사용자 지정 모양을 그리고 쉐이더로 렌더" "하는 것이 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "모든 것이 들어있는 패키지" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -5102,7 +5114,7 @@ msgstr "" "크립팅 작업 공간과 애니메이션 에디터, 타일맵 에디터, 쉐이더 에디터, 디버거, " "프로파일러, 로컬 및 원격 장치를 핫 리로드 하는 기능 등등을 가지고 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -5114,7 +5126,7 @@ msgstr "" "다. 아니면 `Tiled Map Importer `__ 처럼 하나로 만들 수도 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -5125,17 +5137,18 @@ msgstr "" "제공하는 이유이기도 합니다. 그들은 게임 개발자와 게임 디자이너의 필요를 위해 " "제작되었고, 엔진과 에디터에 완벽하게 통합됩니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 +#, fuzzy msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" "GDScript는 파이썬과 유사한 구문을 사용하여 쉬운 코드를 사용하지만, 타입을 인" "지하고 정적 언어의 자동 완성 품질을 제공합니다. 또한 Vectors와 Colors 같은 내" "장 함수를 가지고 있어 게임플레이에 최적화되어 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " @@ -5145,7 +5158,7 @@ msgstr "" "파일러를 사용한) 파이썬과 같이 컴파일된 언어를 사용해 고성능의 코드를 작성할 " "수 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " @@ -5154,7 +5167,7 @@ msgstr "" "*VisualScript는 노드 기반 프로그래밍 언어로 에디터에 잘 통합되어 있습니다. 노" "드나 리소스를 그래프로 드래그 앤 드롭하여 새 노드 블럭을 생성할 수 있습니다.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -5167,41 +5180,46 @@ msgstr "" "다. 고도는 게임 코드를 사용하여 에디터의 기능성을 넓히는 완전한 API를 제공합" "니다. 하단의 `The Godot editor is a Godot game`_ 을 참고하세요." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#, fuzzy msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" "*고도 엔진 2에서 kubecz3k이 만드신 State Machine editor 플러그인입니다. 이걸" "로 당신은 시각적으로 상태와 변화를 다룰 수 있습니다*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "오픈 소스" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#, fuzzy msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" "고도는 **MIT 라이선스** 하에 완전한 오픈 소스 코드베이스를 제공합니다. 이는 " "여기서 제공하는 모든 기술들은 (자유로서의) 무료임을 의미합니다. 대부분의 경" "우, 기술들은 참여자들에 의해 처음부터 코드화가 되어있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#, fuzzy msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" "누구든지 그들의 프로젝트의 필요에 맞는 도구들을 연결할 수 있습니다 - 다만 그" "것들이 엔진과 함께 제공되지 않습니다. 이것은 NViDia PhysX나 구글 애드몹, 혹" "은 FBX 파일 importer일지도 모릅니다. 이들은 대신 서드 파티 플러그인으로서 넣" "을 수 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -5212,7 +5230,7 @@ msgstr "" "텐츠로 만들 수 있다는 것을 의미합니다. 또한 고도는 엔진 차체에서 오는 스택 추" "적도 오류로 인식하므로, 게임을 쉽게 디버깅 할 수 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." @@ -5220,11 +5238,11 @@ msgstr "" "이것은 어떤 방식으로라도 **고도를 사용하는 작업에 영향을 주지 않습니다** : 엔" "진에는 어떤 문자열도 붙어있지 않고 문자열로 만들 것도 없습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "커뮤니티 중심" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -5236,7 +5254,7 @@ msgstr "" "요구가 반영된 것입니다. 새로은 기능은 핵심 개발자로부터 나오며 대부분의 사용" "자들에게 도움을 주는 것을 최우선으로 봅니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -5249,11 +5267,11 @@ msgstr "" "보이는 기능들을 작업하기때문에, 모든 주요 릴리즈마다 엔진의 모든 방면에서 개" "선되는 것을 볼 수 있을겁니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "고도 에디터는 고도 게임입니다" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -5266,7 +5284,7 @@ msgstr "" "사용해서** , **플러그인을 만들거나 에디터를 확장** 시킬수 있다는 것을 의미합" "니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." @@ -5275,18 +5293,20 @@ msgstr "" "게 되었습니다. ``tool`` 키워드로 당신은 에디터에서 어떤 게임 코드도 실행시킬 " "수 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 +#, fuzzy msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" "*RPG in a Box는 복셀 RPG 에디터로 고도 2 에서 만들어졌습니다. 노드 기반 프로" "그래밍 시스템과 인터페이스의 일부를 위해 고도 UI 툴을 사용했습니다.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 +#, fuzzy msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." @@ -5296,15 +5316,16 @@ msgstr "" "터 같은 플러그인을 제작하거나, 프로젝트에 쓰이는 것과 똑같은 노드와 API를 가" "지고 스크립트를 만들 수 있습니다." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "2D 와 3D 엔진을 분리함" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 +#, fuzzy msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" "고도는 전용 2D 와 3D 렌더링 엔진을 제공합니다. 그 결과 **2D 씬의 기본 단위는 " @@ -9940,9 +9961,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -13404,8 +13425,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -13523,7 +13544,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -14578,7 +14599,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -14770,28 +14791,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -14882,58 +14903,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "적어놓을 만한 사항들이 있습니다:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -14993,6 +14962,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -15012,6 +14988,222 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "적어놓을 만한 사항들이 있습니다:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "ArrayMesh" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "애니메이션" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "스프라이트 애니메이션" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "AnimationPlayer" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -15451,7 +15643,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -20423,7 +20615,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -20466,7 +20658,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -20491,10 +20683,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -20573,7 +20765,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -20664,7 +20856,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -20784,18 +20976,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -20803,108 +20995,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -20913,261 +21105,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -21176,22 +21369,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -21199,24 +21392,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -21224,11 +21417,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -21236,11 +21429,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -21248,11 +21441,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -21261,7 +21454,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -21269,22 +21462,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -21292,11 +21485,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -21306,79 +21499,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "깊이" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -21386,17 +21579,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -21405,17 +21598,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -21558,7 +21751,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -22851,7 +23044,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -22959,7 +23152,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -24222,303 +24415,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -24530,6 +24855,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -24676,6 +25002,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -24690,6 +25017,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -24725,14 +25053,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -25011,7 +25342,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -25150,8 +25481,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -25532,11 +25863,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -25566,11 +25898,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -25680,9 +26013,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -25768,7 +26101,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -25776,7 +26109,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -25812,8 +26145,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -25843,7 +26176,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -25879,7 +26213,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -25956,7 +26290,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -25982,10 +26316,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -26008,8 +26342,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -26055,7 +26389,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -26083,9 +26417,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -26100,15 +26434,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -26121,7 +26455,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -26158,7 +26492,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -26179,7 +26513,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -26222,9 +26556,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -26262,92 +26596,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -26357,37 +26691,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -26397,32 +26731,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -26431,19 +26765,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -26451,26 +26785,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -26478,7 +26812,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -26487,7 +26821,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -26496,20 +26830,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -26518,66 +26852,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -26587,31 +26921,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -26621,51 +26955,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -26673,23 +27007,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -26697,45 +27031,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -26743,7 +27077,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -26753,51 +27087,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -26805,13 +27139,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -26819,65 +27153,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -26885,7 +27219,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -26893,84 +27227,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -26979,24 +27313,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -27004,56 +27338,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -27061,14 +27395,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -27076,7 +27410,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -27086,49 +27420,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -27137,7 +27467,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -27146,19 +27476,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -27167,47 +27497,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -27215,53 +27545,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -27271,11 +27601,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -27288,57 +27618,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -27525,7 +27855,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -27538,7 +27868,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -27590,8 +27920,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -27774,8 +28104,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -27920,7 +28249,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -28086,7 +28415,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -28099,7 +28428,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -28114,7 +28443,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -28124,8 +28453,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -28138,7 +28467,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -28223,7 +28552,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -28287,30 +28616,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -28318,108 +28647,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -28427,49 +28756,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -28477,27 +28806,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -28507,7 +28836,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -28516,14 +28845,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -28532,32 +28861,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -28565,7 +28894,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -28575,54 +28904,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -28630,38 +28959,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -28669,29 +28998,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -28700,29 +29029,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -28731,13 +29060,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -28745,18 +29074,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -28764,38 +29093,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -28803,38 +29132,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -28843,32 +29172,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -28876,7 +29205,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -28884,13 +29213,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -28898,20 +29227,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -28920,20 +29249,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -28942,70 +29271,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -29015,11 +29345,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -29027,39 +29357,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -29068,67 +29398,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -29138,34 +29468,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -29173,20 +29503,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -30197,6 +30527,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -31952,15 +32283,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -34791,12 +35139,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "애니메이션" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -36768,8 +37110,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -36976,9 +37318,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -40675,11 +41017,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -40707,7 +41049,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -40748,10 +41090,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -40808,7 +41150,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -40875,7 +41217,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -40884,7 +41226,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -40895,7 +41237,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -40903,7 +41245,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -40911,43 +41253,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -40956,17 +41298,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -40976,7 +41318,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -40987,7 +41329,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -40999,30 +41341,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -41033,7 +41381,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -41041,89 +41389,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -41182,7 +41638,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -41918,10 +42374,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -42742,7 +43194,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -42967,7 +43419,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -43033,9 +43485,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -43113,7 +43565,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -43256,7 +43708,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -43300,7 +43752,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -43317,7 +43769,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -43452,7 +43904,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -43481,8 +43933,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -43499,7 +43951,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -43508,7 +43960,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -43654,12 +44106,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -43723,7 +44175,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -43740,261 +44192,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -45900,6 +46351,1818 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr ":ref:`RigidBody2D ` ( ``Mob`` 으로 이름지음)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "스크립팅" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "플레이어 움직이기" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "``Mob`` 에게 스크립트를 추가해주고 다음의 멤버 변수를 추가해주세요:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "스크립트 추가" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "적어놓을 만한 사항들이 있습니다:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "스크립트 추가" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "스크립트 추가" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "스크립트 추가" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "프로젝트 구성" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "플러그인" @@ -51268,7 +53531,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -51313,9 +53576,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -51346,17 +53610,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -51374,6 +53639,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "조건" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -53933,7 +56251,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -53992,15 +56310,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -54131,7 +56445,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -54205,19 +56519,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -54229,15 +56543,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -54274,8 +56588,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -54355,7 +56669,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -54698,10 +57012,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"이 문서 외에 여러가지 `고도 데모 프로젝트들 `_ 도 살펴보면 좋습니다." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/lt.po b/weblate/lt.po index 2d112f5cd1..8b6c56920e 100644 --- a/weblate/lt.po +++ b/weblate/lt.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-12 09:40+0000\n" "Last-Translator: Kornelijus \n" "Language-Team: Lithuanian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3259,109 +3270,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3369,55 +3380,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3425,57 +3436,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3485,17 +3496,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3503,7 +3514,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3511,55 +3522,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3567,17 +3578,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3924,7 +3935,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3933,24 +3944,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3959,11 +3970,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3971,7 +3982,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3980,7 +3991,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3988,18 +3999,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4007,7 +4018,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4015,7 +4026,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4023,28 +4034,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4053,32 +4064,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4086,17 +4098,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4104,7 +4116,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4113,11 +4125,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4125,36 +4137,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8681,9 +8693,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12085,8 +12097,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12204,7 +12216,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13259,7 +13271,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13451,28 +13463,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13563,58 +13575,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13674,6 +13634,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13693,6 +13660,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14132,7 +14312,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19104,7 +19284,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19147,7 +19327,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19172,10 +19352,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19254,7 +19434,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19345,7 +19525,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19465,18 +19645,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19484,108 +19664,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19594,261 +19774,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19857,22 +20038,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19880,24 +20061,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19905,11 +20086,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19917,11 +20098,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19929,11 +20110,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19942,7 +20123,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19950,22 +20131,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19973,11 +20154,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19987,79 +20168,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20067,17 +20248,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20086,17 +20267,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20239,7 +20420,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21532,7 +21713,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21640,7 +21821,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22903,303 +23084,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23211,6 +23524,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23357,6 +23671,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23371,6 +23686,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23406,14 +23722,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23692,7 +24011,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23831,8 +24150,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24213,11 +24532,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24247,11 +24567,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24361,9 +24682,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24449,7 +24770,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24457,7 +24778,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24493,8 +24814,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24524,7 +24845,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24560,7 +24882,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24637,7 +24959,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24663,10 +24985,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24689,8 +25011,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24736,7 +25058,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24764,9 +25086,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24781,15 +25103,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24802,7 +25124,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24839,7 +25161,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24860,7 +25182,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24903,9 +25225,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24943,92 +25265,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25038,37 +25360,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25078,32 +25400,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25112,19 +25434,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25132,26 +25454,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25159,7 +25481,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25168,7 +25490,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25177,20 +25499,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25199,66 +25521,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25268,31 +25590,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25302,51 +25624,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25354,23 +25676,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25378,45 +25700,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25424,7 +25746,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25434,51 +25756,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25486,13 +25808,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25500,65 +25822,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25566,7 +25888,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25574,84 +25896,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25660,24 +25982,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25685,56 +26007,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25742,14 +26064,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25757,7 +26079,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25767,49 +26089,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25818,7 +26136,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25827,19 +26145,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25848,47 +26166,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25896,53 +26214,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25952,11 +26270,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25969,57 +26287,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26206,7 +26524,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26219,7 +26537,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26271,8 +26589,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26455,8 +26773,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26601,7 +26918,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26767,7 +27084,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26780,7 +27097,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26795,7 +27112,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26805,8 +27122,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26819,7 +27136,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26904,7 +27221,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26968,30 +27285,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -26999,108 +27316,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27108,49 +27425,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27158,27 +27475,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27188,7 +27505,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27197,14 +27514,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27213,32 +27530,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27246,7 +27563,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27256,54 +27573,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27311,38 +27628,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27350,29 +27667,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27381,29 +27698,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27412,13 +27729,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27426,18 +27743,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27445,38 +27762,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27484,38 +27801,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27524,32 +27841,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27557,7 +27874,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27565,13 +27882,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27579,20 +27896,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27601,20 +27918,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27623,70 +27940,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27696,11 +28014,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27708,39 +28026,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27749,67 +28067,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27819,34 +28137,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27854,20 +28172,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28878,6 +29196,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30633,15 +30952,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33472,12 +33808,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35449,8 +35779,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35657,9 +35987,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39356,11 +39686,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39388,7 +39718,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39429,10 +39759,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39489,7 +39819,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39556,7 +39886,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39565,7 +39895,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39576,7 +39906,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39584,7 +39914,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39592,43 +39922,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39637,17 +39967,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39657,7 +39987,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39668,7 +39998,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39680,30 +40010,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39714,7 +40050,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39722,89 +40058,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39863,7 +40307,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40599,10 +41043,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41423,7 +41863,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41648,7 +42088,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41714,9 +42154,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41794,7 +42234,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41937,7 +42377,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41981,7 +42421,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -41998,7 +42438,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42133,7 +42573,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42162,8 +42602,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42180,7 +42620,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42189,7 +42629,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42335,12 +42775,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42404,7 +42844,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42421,261 +42861,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44581,6 +45020,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49949,7 +52190,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -49994,9 +52235,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50027,17 +52269,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50055,6 +52298,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52614,7 +54909,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52673,15 +54968,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52812,7 +55103,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52886,19 +55177,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52910,15 +55201,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52955,8 +55246,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53036,7 +55327,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53380,7 +55671,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/ms.po b/weblate/ms.po index edd2931497..e181257323 100644 --- a/weblate/ms.po +++ b/weblate/ms.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-30 09:40+0000\n" "Last-Translator: Syaz Amirin \n" "Language-Team: Malay ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3280,109 +3291,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3390,55 +3401,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3446,57 +3457,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3506,17 +3517,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3524,7 +3535,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3532,55 +3543,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3588,17 +3599,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3945,7 +3956,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3954,24 +3965,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3980,11 +3991,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3992,7 +4003,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4001,7 +4012,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4009,18 +4020,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4028,7 +4039,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4036,7 +4047,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4044,28 +4055,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4074,32 +4085,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4107,17 +4119,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4125,7 +4137,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4134,11 +4146,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4146,36 +4158,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8702,9 +8714,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12106,8 +12118,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12225,7 +12237,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13280,7 +13292,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13472,28 +13484,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13584,58 +13596,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13695,6 +13655,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13714,6 +13681,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14153,7 +14333,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19125,7 +19305,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19168,7 +19348,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19193,10 +19373,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19275,7 +19455,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19366,7 +19546,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19486,18 +19666,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19505,108 +19685,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19615,261 +19795,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19878,22 +20059,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19901,24 +20082,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19926,11 +20107,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19938,11 +20119,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19950,11 +20131,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19963,7 +20144,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19971,22 +20152,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19994,11 +20175,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20008,79 +20189,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20088,17 +20269,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20107,17 +20288,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20260,7 +20441,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21553,7 +21734,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21661,7 +21842,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22924,303 +23105,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23232,6 +23545,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23378,6 +23692,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23392,6 +23707,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23427,14 +23743,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23713,7 +24032,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23852,8 +24171,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24234,11 +24553,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24268,11 +24588,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24382,9 +24703,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24470,7 +24791,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24478,7 +24799,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24514,8 +24835,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24545,7 +24866,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24581,7 +24903,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24658,7 +24980,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24684,10 +25006,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24710,8 +25032,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24757,7 +25079,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24785,9 +25107,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24802,15 +25124,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24823,7 +25145,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24860,7 +25182,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24881,7 +25203,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24924,9 +25246,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24964,92 +25286,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25059,37 +25381,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25099,32 +25421,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25133,19 +25455,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25153,26 +25475,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25180,7 +25502,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25189,7 +25511,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25198,20 +25520,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25220,66 +25542,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25289,31 +25611,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25323,51 +25645,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25375,23 +25697,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25399,45 +25721,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25445,7 +25767,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25455,51 +25777,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25507,13 +25829,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25521,65 +25843,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25587,7 +25909,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25595,84 +25917,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25681,24 +26003,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25706,56 +26028,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25763,14 +26085,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25778,7 +26100,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25788,49 +26110,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25839,7 +26157,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25848,19 +26166,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25869,47 +26187,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25917,53 +26235,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25973,11 +26291,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25990,57 +26308,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26227,7 +26545,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26240,7 +26558,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26292,8 +26610,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26476,8 +26794,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26622,7 +26939,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26788,7 +27105,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26801,7 +27118,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26816,7 +27133,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26826,8 +27143,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26840,7 +27157,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26925,7 +27242,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26989,30 +27306,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27020,108 +27337,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27129,49 +27446,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27179,27 +27496,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27209,7 +27526,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27218,14 +27535,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27234,32 +27551,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27267,7 +27584,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27277,54 +27594,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27332,38 +27649,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27371,29 +27688,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27402,29 +27719,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27433,13 +27750,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27447,18 +27764,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27466,38 +27783,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27505,38 +27822,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27545,32 +27862,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27578,7 +27895,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27586,13 +27903,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27600,20 +27917,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27622,20 +27939,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27644,70 +27961,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27717,11 +28035,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27729,39 +28047,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27770,67 +28088,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27840,34 +28158,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27875,20 +28193,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28899,6 +29217,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30654,15 +30973,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33493,12 +33829,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35470,8 +35800,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35678,9 +36008,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39377,11 +39707,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39409,7 +39739,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39450,10 +39780,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39510,7 +39840,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39577,7 +39907,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39586,7 +39916,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39597,7 +39927,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39605,7 +39935,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39613,43 +39943,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39658,17 +39988,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39678,7 +40008,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39689,7 +40019,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39701,30 +40031,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39735,7 +40071,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39743,89 +40079,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39884,7 +40328,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40620,10 +41064,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41444,7 +41884,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41669,7 +42109,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41735,9 +42175,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41815,7 +42255,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41958,7 +42398,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42002,7 +42442,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42019,7 +42459,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42154,7 +42594,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42183,8 +42623,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42201,7 +42641,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42210,7 +42650,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42356,12 +42796,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42425,7 +42865,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42442,261 +42882,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44602,6 +45041,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49970,7 +52211,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50015,9 +52256,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50048,17 +52290,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50076,6 +52319,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52635,7 +54930,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52694,15 +54989,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52833,7 +55124,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52907,19 +55198,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52931,15 +55222,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52976,8 +55267,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53057,7 +55348,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53401,7 +55692,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/nb.po b/weblate/nb.po index 2dc8bbcfbf..0b5578bff4 100644 --- a/weblate/nb.po +++ b/weblate/nb.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-22 19:42+0000\n" "Last-Translator: Frank T. Rambol \n" "Language-Team: Norwegian Bokmål ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3250,109 +3261,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3360,55 +3371,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3416,57 +3427,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3476,17 +3487,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3494,7 +3505,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3502,55 +3513,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3558,17 +3569,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3915,7 +3926,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3924,24 +3935,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3950,11 +3961,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3962,7 +3973,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3971,7 +3982,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3979,18 +3990,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -3998,7 +4009,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4006,7 +4017,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4014,28 +4025,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4044,32 +4055,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4077,17 +4089,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4095,7 +4107,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4104,11 +4116,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4116,36 +4128,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8672,9 +8684,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12076,8 +12088,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12195,7 +12207,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13250,7 +13262,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13442,28 +13454,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13554,58 +13566,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13665,6 +13625,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13684,6 +13651,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14123,7 +14303,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19095,7 +19275,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19138,7 +19318,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19163,10 +19343,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19245,7 +19425,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19336,7 +19516,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19456,18 +19636,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19475,108 +19655,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19585,261 +19765,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19848,22 +20029,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19871,24 +20052,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19896,11 +20077,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19908,11 +20089,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19920,11 +20101,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19933,7 +20114,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19941,22 +20122,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19964,11 +20145,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19978,79 +20159,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20058,17 +20239,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20077,17 +20258,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20230,7 +20411,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21523,7 +21704,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21631,7 +21812,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22894,303 +23075,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23202,6 +23515,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23348,6 +23662,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23362,6 +23677,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23397,14 +23713,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23683,7 +24002,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23822,8 +24141,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24204,11 +24523,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24238,11 +24558,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24352,9 +24673,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24440,7 +24761,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24448,7 +24769,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24484,8 +24805,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24515,7 +24836,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24551,7 +24873,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24628,7 +24950,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24654,10 +24976,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24680,8 +25002,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24727,7 +25049,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24755,9 +25077,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24772,15 +25094,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24793,7 +25115,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24830,7 +25152,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24851,7 +25173,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24894,9 +25216,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24934,92 +25256,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25029,37 +25351,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25069,32 +25391,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25103,19 +25425,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25123,26 +25445,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25150,7 +25472,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25159,7 +25481,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25168,20 +25490,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25190,66 +25512,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25259,31 +25581,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25293,51 +25615,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25345,23 +25667,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25369,45 +25691,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25415,7 +25737,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25425,51 +25747,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25477,13 +25799,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25491,65 +25813,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25557,7 +25879,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25565,84 +25887,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25651,24 +25973,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25676,56 +25998,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25733,14 +26055,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25748,7 +26070,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25758,49 +26080,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25809,7 +26127,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25818,19 +26136,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25839,47 +26157,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25887,53 +26205,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25943,11 +26261,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25960,57 +26278,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26197,7 +26515,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26210,7 +26528,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26262,8 +26580,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26446,8 +26764,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26592,7 +26909,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26758,7 +27075,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26771,7 +27088,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26786,7 +27103,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26796,8 +27113,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26810,7 +27127,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26895,7 +27212,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26959,30 +27276,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -26990,108 +27307,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27099,49 +27416,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27149,27 +27466,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27179,7 +27496,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27188,14 +27505,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27204,32 +27521,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27237,7 +27554,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27247,54 +27564,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27302,38 +27619,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27341,29 +27658,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27372,29 +27689,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27403,13 +27720,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27417,18 +27734,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27436,38 +27753,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27475,38 +27792,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27515,32 +27832,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27548,7 +27865,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27556,13 +27873,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27570,20 +27887,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27592,20 +27909,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27614,70 +27931,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27687,11 +28005,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27699,39 +28017,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27740,67 +28058,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27810,34 +28128,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27845,20 +28163,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28869,6 +29187,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30624,15 +30943,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33463,12 +33799,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35440,8 +35770,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35648,9 +35978,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39347,11 +39677,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39379,7 +39709,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39420,10 +39750,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39480,7 +39810,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39547,7 +39877,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39556,7 +39886,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39567,7 +39897,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39575,7 +39905,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39583,43 +39913,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39628,17 +39958,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39648,7 +39978,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39659,7 +39989,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39671,30 +40001,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39705,7 +40041,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39713,89 +40049,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39854,7 +40298,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40590,10 +41034,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41414,7 +41854,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41639,7 +42079,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41705,9 +42145,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41785,7 +42225,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41928,7 +42368,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41972,7 +42412,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -41989,7 +42429,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42124,7 +42564,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42153,8 +42593,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42171,7 +42611,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42180,7 +42620,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42326,12 +42766,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42395,7 +42835,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42412,261 +42852,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44572,6 +45011,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49940,7 +52181,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -49985,9 +52226,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50018,17 +52260,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50046,6 +52289,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52605,7 +54900,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52664,15 +54959,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52803,7 +55094,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52877,19 +55168,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52901,15 +55192,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52946,8 +55237,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53027,7 +55318,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53371,7 +55662,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/nl.po b/weblate/nl.po index 1ab1684720..0273aa3363 100644 --- a/weblate/nl.po +++ b/weblate/nl.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-30 15:36+0000\n" "Last-Translator: Tahar Meijs \n" "Language-Team: Dutch ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3286,109 +3297,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3396,55 +3407,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3452,57 +3463,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3512,17 +3523,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3530,7 +3541,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3538,55 +3549,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3594,17 +3605,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3951,7 +3962,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3960,24 +3971,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3986,11 +3997,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3998,7 +4009,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4007,7 +4018,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4015,18 +4026,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4034,7 +4045,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4042,7 +4053,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4050,28 +4061,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4080,32 +4091,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4113,17 +4125,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4131,7 +4143,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4140,11 +4152,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4152,36 +4164,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8708,9 +8720,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12112,8 +12124,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12231,7 +12243,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13286,7 +13298,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13478,28 +13490,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13590,58 +13602,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13701,6 +13661,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13720,6 +13687,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14159,7 +14339,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19131,7 +19311,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19174,7 +19354,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19199,10 +19379,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19281,7 +19461,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19372,7 +19552,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19492,18 +19672,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19511,108 +19691,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19621,261 +19801,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19884,22 +20065,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19907,24 +20088,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19932,11 +20113,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19944,11 +20125,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19956,11 +20137,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19969,7 +20150,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19977,22 +20158,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20000,11 +20181,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20014,79 +20195,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20094,17 +20275,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20113,17 +20294,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20266,7 +20447,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21559,7 +21740,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21667,7 +21848,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22930,303 +23111,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23238,6 +23551,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23384,6 +23698,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23398,6 +23713,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23433,14 +23749,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23719,7 +24038,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23858,8 +24177,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24240,11 +24559,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24274,11 +24594,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24388,9 +24709,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24476,7 +24797,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24484,7 +24805,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24520,8 +24841,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24551,7 +24872,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24587,7 +24909,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24664,7 +24986,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24690,10 +25012,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24716,8 +25038,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24763,7 +25085,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24791,9 +25113,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24808,15 +25130,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24829,7 +25151,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24866,7 +25188,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24887,7 +25209,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24930,9 +25252,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24970,92 +25292,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25065,37 +25387,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25105,32 +25427,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25139,19 +25461,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25159,26 +25481,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25186,7 +25508,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25195,7 +25517,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25204,20 +25526,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25226,66 +25548,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25295,31 +25617,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25329,51 +25651,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25381,23 +25703,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25405,45 +25727,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25451,7 +25773,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25461,51 +25783,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25513,13 +25835,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25527,65 +25849,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25593,7 +25915,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25601,84 +25923,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25687,24 +26009,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25712,56 +26034,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25769,14 +26091,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25784,7 +26106,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25794,49 +26116,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25845,7 +26163,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25854,19 +26172,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25875,47 +26193,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25923,53 +26241,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25979,11 +26297,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25996,57 +26314,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26233,7 +26551,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26246,7 +26564,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26298,8 +26616,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26482,8 +26800,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26628,7 +26945,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26794,7 +27111,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26807,7 +27124,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26822,7 +27139,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26832,8 +27149,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26846,7 +27163,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26931,7 +27248,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26995,30 +27312,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27026,108 +27343,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27135,49 +27452,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27185,27 +27502,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27215,7 +27532,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27224,14 +27541,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27240,32 +27557,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27273,7 +27590,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27283,54 +27600,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27338,38 +27655,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27377,29 +27694,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27408,29 +27725,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27439,13 +27756,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27453,18 +27770,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27472,38 +27789,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27511,38 +27828,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27551,32 +27868,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27584,7 +27901,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27592,13 +27909,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27606,20 +27923,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27628,20 +27945,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27650,70 +27967,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27723,11 +28041,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27735,39 +28053,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27776,67 +28094,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27846,34 +28164,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27881,20 +28199,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28905,6 +29223,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30660,15 +30979,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33499,12 +33835,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35476,8 +35806,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35684,9 +36014,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39383,11 +39713,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39415,7 +39745,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39456,10 +39786,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39516,7 +39846,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39583,7 +39913,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39592,7 +39922,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39603,7 +39933,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39611,7 +39941,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39619,43 +39949,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39664,17 +39994,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39684,7 +40014,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39695,7 +40025,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39707,30 +40037,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39741,7 +40077,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39749,89 +40085,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39890,7 +40334,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40626,10 +41070,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41450,7 +41890,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41675,7 +42115,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41741,9 +42181,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41821,7 +42261,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41964,7 +42404,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42008,7 +42448,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42025,7 +42465,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42160,7 +42600,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42189,8 +42629,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42207,7 +42647,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42216,7 +42656,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42362,12 +42802,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42431,7 +42871,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42448,261 +42888,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44608,6 +45047,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49976,7 +52217,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50021,9 +52262,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50054,17 +52296,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50082,6 +52325,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52641,7 +54936,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52700,15 +54995,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52839,7 +55130,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52913,19 +55204,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52937,15 +55228,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52982,8 +55273,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53063,7 +55354,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53407,7 +55698,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/pl.po b/weblate/pl.po index 7c22a128c0..36dbc9c97f 100644 --- a/weblate/pl.po +++ b/weblate/pl.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-17 07:19+0000\n" "Last-Translator: RM \n" "Language-Team: Polish ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " @@ -4207,23 +4219,23 @@ msgstr "" "wyświetlane przez niego informacje nie były zakryte żadnymi elementami gry, " "takimi jak gracz lub przeciwnik." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "HUD wyświetla następujące informacje:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "Wynik, zmieniany przez ``ScoreTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "Wiadomości takie jak \"Koniec Gry\" lub \"Przygotuj Się!\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "Przycisk \"Start\" rozpoczyna grę." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -4234,27 +4246,27 @@ msgstr "" "dwóch typów węzła ref:`Control ` - :ref:`Label ` " "oraz :ref:`Button `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "Utwórz je jako dzieci węzła ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr ":ref:`Label ` nazwany ``ScoreLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr ":ref:`Label ` nazwany ``MessageLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "Przycisk :ref:`Button ` o nazwie ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr ":ref:`Timer ` o nazwie ``MessageTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -4270,7 +4282,7 @@ msgstr "" "węzła control do jego punktu zakotwiczenia. Więcej informacji na ten temat " "można znaleźć w temacie :ref:`doc_design_interfaces_with_the_control_nodes`." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" @@ -4278,7 +4290,7 @@ msgstr "" "Uporządkuj węzły w sposób pokazany poniżej. Kliknąć przycisk \"Zakotwicz\", " "aby ustawić dla węzła Control kotwicę:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" @@ -4286,97 +4298,97 @@ msgstr "" "Węzły można przeciągnąć ręcznie lub, aby uzyskać bardziej precyzyjne " "rozmieszczenie, należy użyć następujących ustawień:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "ScoreLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "``Layout``: \"Górny Środek\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "``Margines``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "Lewy: ``-25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "Góra: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "Prawo: ``25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "Dół: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "Tekst: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "MessageLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "``Layout``: \"Środek\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "Lewy: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "Góra: ``-150``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "Prawy: ``200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "Dół: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "Tekst: ``Dodge the Creeps!``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "StartButton" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "``Layout``: \"Środek Dół\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "Lewy: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "Góra: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "Prawy: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "Dół: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "Tekst: ``Start``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4388,13 +4400,13 @@ msgstr "" "Aby użyć tej czcionki, wykonaj następujące czynności dla każdego z trzech " "węzłów ``Control``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" "W zakładce \"Czcionki niestandardowe\" wybierz opcję \"Nowa czcionka " "dynamiczna\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " @@ -4405,18 +4417,18 @@ msgstr "" "Należy również ustawić ``Rozmiar`` czcionki. Ustawienie ``64`` powinno " "działać dobrze." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "Teraz dodaj ten skrypt do ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" "Sygnał ``start_game`` informuje węzeł ``Main`` o naciśnięciu przycisku." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " @@ -4426,7 +4438,7 @@ msgstr "" "jak \"Przygotuj się\". W ``MessageTimer`` ustaw ``Czas oczekiwania`` na " "``2`` i ustaw właściwość ``Jednokrotny`` na \"Włączone\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." @@ -4435,11 +4447,11 @@ msgstr "" "będzie wyświetlał się napis \"Game Over\" (Koniec Gry), następnie powróci do " "ekranu tytułowego i pojawi się przycisk \"Start\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "Funkcja ta jest wywoływana w ``Main`` przy każdej zmianie wyniku." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." @@ -4447,11 +4459,11 @@ msgstr "" "Podłączyć ``Timeout()`` do sygnału ``MessageTimer`` i ``naciśnięty()`` do " "sygnału ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "Podłączenie HUD do Main" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4463,7 +4475,7 @@ msgstr "" "umieść ją na dole drzewa. Pełne drzewo powinno wyglądać tak, więc upewnij " "się, że niczego nie przegapiłeś:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" @@ -4471,7 +4483,7 @@ msgstr "" "Teraz musimy podłączyć funkcję ``HUD`` do naszego skryptu ``Main``. Wymaga " "to paru poprawek do sceny ``Main``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." @@ -4479,7 +4491,7 @@ msgstr "" "W zakładce Węzeł należy podłączyć sygnał HUD'a ``start_game`` do funkcji " "``new_game()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" @@ -4487,11 +4499,11 @@ msgstr "" "W ``new_game()``, zaktualizuj wyświetlany wynik i pokaż komunikat " "\"Przygotuj się\":" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "W ``game_over()`` musimy wywołać odpowiednią funkcję w ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" @@ -4499,7 +4511,7 @@ msgstr "" "Na koniec dodaj to do ``on_on_ScoreTimer_timeout()``, aby wyświetlacz był " "zsynchronizowany ze zmieniającym się wynikiem:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." @@ -4507,11 +4519,11 @@ msgstr "" "Teraz jesteś gotowy do gry! Kliknąć przycisk \"Uruchom projekt\". Zostaniesz " "poproszony o wybranie głównej sceny, więc wybierz ``Main.tscn``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "Kończenie" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " @@ -4522,12 +4534,12 @@ msgstr "" "celu poprawy wrażeń z gry. Zapraszamy do rozszerzenia rozgrywki o własne " "pomysły." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "Tło" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4543,7 +4555,7 @@ msgstr "" "Wybierz kolor, który chcesz i przeciągnij ``ColorRect`` tak, aby zakrył " "ekran." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." @@ -4551,11 +4563,11 @@ msgstr "" "Obraz tła można również dodać, jeśli taki istnieje, za pomocą węzła " "``Sprite``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "Efekty dźwiękowe" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4567,7 +4579,7 @@ msgstr "" "\"House In a Forest Loop.ogg\" na muzykę w tle i \"gameover.wav\" odtwarzaną " "w razie przegranej." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4579,7 +4591,7 @@ msgstr "" "każdym z nich kliknij na właściwość ``Stream``, wybierz opcję \"Wczytaj\" i " "wybierz odpowiedni plik audio." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." @@ -4587,16 +4599,16 @@ msgstr "" "Aby odtwarzać muzykę, dodaj ``$Music.play()`` w funkcji ``new_game()`` i ``" "$Music.stop( )`` w funkcji ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "Na koniec dodaj ``$DeathSound.play()`` do funkcji ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Cząsteczki" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " @@ -4605,7 +4617,7 @@ msgstr "" "Na koniec dodajmy efekt smugi do ruchu gracza. Wybierz swoją scenę i dodaj " "węzeł :ref:`Particles2D ` o nazwie ``Trail``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " @@ -4615,7 +4627,7 @@ msgstr "" "tworzenia różnych efektów. Aby uzyskać efekt jak w tym przykładzie, należy " "użyć następujących ustawień:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" @@ -4623,14 +4635,14 @@ msgstr "" "Musisz również utworzyć ``Materiał`` klikając na ````, a następnie " "\"New ParticlesMaterial\". Poniżej znajdują się ustawienia w tym zakresie:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" @@ -4638,7 +4650,7 @@ msgstr "" "Kliknij \"New GradientTexture\", a następnie pod \"Gradient\", kliknij " "\"Nowy Gradient\". Zobaczysz takie okno:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4650,7 +4662,7 @@ msgstr "" "wybrać kolor. Dla pierwszego koloru należy ustawić wartość ``A`` (alfa) na " "około połowę. Dla drugiego, ustaw go aż do ``0``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." @@ -4658,11 +4670,11 @@ msgstr "" "Zobacz :ref:`Particles2D ` aby uzyskać więcej szczegółów " "na temat wykorzystania efektów cząsteczkowych." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "Pliki projektu" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -5118,7 +5130,7 @@ msgstr "" "każdego silnika. Prowadzi to do różnych sposobów formowania struktur gier. " "Wszystko to wynika z filozofii ich projektowania." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -5132,7 +5144,7 @@ msgstr "" "twojego projektu, musisz wypróbować go na własną rękę i zrozumieć jego " "konstrukcję oraz ograniczenia." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." @@ -5140,11 +5152,11 @@ msgstr "" "Zobacz `Discover Godot 3, the Free game engine `_, jeśli szukasz przeglądu funkcji Godota." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " @@ -5155,7 +5167,7 @@ msgstr "" "ścisłych wzorców programowania, aby zaoferować intuicyjny sposób tworzenia " "struktur gier." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -5164,11 +5176,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "Ponadto można **dziedziczyć** z każdej sceny." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -5180,7 +5192,7 @@ msgstr "" "kodzie, z wyjątkiem tego, że możesz ją zaprojektować za pomocą edytora, " "używając tylko kodu." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -5194,7 +5206,7 @@ msgstr "" "Magik również go zaktualizuje. Pomaga to w budowaniu projektów tak, aby ich " "struktura odpowiadała projektowi gry." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -5207,7 +5219,7 @@ msgstr "" "posiada elementy takie jak obszar kolizji(collision shape), są one " "wyjątkiem, a nie normą." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " @@ -5217,11 +5229,11 @@ msgstr "" "trzech klas rodzicielskich, takie jak transformacje lub możliwość rysowania " "niestandardowych kształtów i renderowania za pomocą niestandardowego shadera." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "Pakiet all-inclusive" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -5233,7 +5245,7 @@ msgstr "" "edytor shaderów, debugger, profiler, możliwość ładowania gry lokalnie i na " "zdalnych urządzeniach itp." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -5245,7 +5257,7 @@ msgstr "" "nich zaimportowana wtyczka. Możesz też taką utworzyć, na przykład `Tiled Map " "Importer `__." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -5256,10 +5268,11 @@ msgstr "" "GDscript i VisualScript, wraz z C#. Są one przeznaczone dla programistów i " "projektantów gier i są ściśle zintegrowane z silnikiem i edytorem." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 +#, fuzzy msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" "GDscript umożliwia pisanie prostego kodu przy użyciu składni podobnej do " @@ -5267,7 +5280,7 @@ msgstr "" "uzupełnianie. Jest również zoptymalizowany pod kątem kodu z wbudowanymi " "typami, takimi jak wektory i kolory." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " @@ -5277,7 +5290,7 @@ msgstr "" "kompilowanych, takich jak C, C++, Rust, lub Python (używając kompilatora " "Cython) bez konieczności ponownej kompilacji silnika." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " @@ -5287,7 +5300,7 @@ msgstr "" "integruje się z edytorem. Możesz przeciągać i upuszczać węzły lub zasoby na " "wykres, aby utworzyć nowe bloki kodu.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -5301,41 +5314,46 @@ msgstr "" "API rozszerzające funkcjonalność edytora za pomocą kodu gry. Zobacz `The " "Godot editor is a Godot game`_ poniżej." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#, fuzzy msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" "*Dodatek do Godot 2 by kubecz3k. Umożliwia wizualne zarządzanie stanami i " "przejściami*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "Otwarto-źródłowy" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#, fuzzy msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" "Godot oferuje w pełni otwartą bazę kodu źródłowego na licencji **MIT**. " "Oznacza to, że wszystkie technologie, które są z nią dostarczane muszą być " "również otwarte. W większości są one stworzone od podstaw przez deweloperów." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#, fuzzy msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" "Każdy może podłączyć własne narzędzia na potrzeby swoich projektów - po " "prostu nie będzie ich dystrybuował wraz z silnikiem. Może to być NViDia " "PhysX, Google Admob lub importer plików FBX. Każde z nich może być " "dostarczane jako wtyczki innych producentów." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -5347,17 +5365,17 @@ msgstr "" "debugować gry, ponieważ Godot będzie wypisywał błędy na stosie, nawet jeśli " "pochodzą one z samego silnika." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "Tworzony przez społeczność" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -5365,7 +5383,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -5378,11 +5396,11 @@ msgstr "" "osoby często pracują nad funkcjami, których mogą potrzebować sami, więc z " "każdym wydaniem silnika zauważysz poprawę we wszystkich aspektach silnika." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "Edytor Godot jest również grą Godot" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -5394,36 +5412,36 @@ msgstr "" "kod gry w edytorze. Oznacza to, że możesz **używać tego samego kodu** i scen " "dla swoich gier, lub **budować wtyczki i rozszerzać możliwości edytora.**" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "Osobny silnik 2D i 3D" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -10698,9 +10716,9 @@ msgstr "Słowo kluczowe" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -14535,8 +14553,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -14662,7 +14680,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -15899,9 +15917,10 @@ msgid "Within single line initializer braces." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 +#, fuzzy msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" "Poniższy przykład pokazuje właściwe wykorzystanie spacji, zgodnie z " "niektórymi z w/w konwencji:" @@ -16111,28 +16130,28 @@ msgstr "Godot-Blender-Eksporter" msgid "Details on exporting" msgstr "Szczegóły eksportowania" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -16232,61 +16251,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "Światła" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" -"Domyślnie lampy w blenderze mają włączone cienie. Może to spowodować " -"problemy z wydajnością w Godocie." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Nie ma żadnych ograniczeń w stosowaniu Godota" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "Właściwości fizyki" @@ -16347,6 +16311,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -16366,6 +16337,228 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "Światła" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" +"Domyślnie lampy w blenderze mają włączone cienie. Może to spowodować " +"problemy z wydajnością w Godocie." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Nie ma żadnych ograniczeń w stosowaniu Godota" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "Siatki" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Identyfikatory" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animacje" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animacja Sprita" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +#, fuzzy +msgid "Action Lib" +msgstr "Węzły funkcyjne" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Dodaj animację gracza" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +#, fuzzy +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "Dodaj następujący kod do ``AnimationPlayer_Manager.gd``:" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -16856,8 +17049,9 @@ msgid "Process" msgstr "Przetwarzaj" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 +#, fuzzy msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" "Pewne procesy mogą zostać zastosowane do obrazów zaimportowanych jako " "tekstura." @@ -22163,7 +22357,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -22206,7 +22400,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "Renderowanie" @@ -22231,10 +22425,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -22313,7 +22507,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -22415,7 +22609,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -22535,18 +22729,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -22554,108 +22748,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "Kolor wierzchołka" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "Jest SRGB" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -22664,261 +22858,262 @@ msgstr "" msgid "Parameters" msgstr "Parametry" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -22927,22 +23122,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -22950,24 +23145,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -22975,11 +23170,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -22987,11 +23182,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -22999,11 +23194,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -23012,7 +23207,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -23020,22 +23215,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -23043,11 +23238,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -23057,79 +23252,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Głębia" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "UV1 i UV2" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -23137,17 +23332,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -23156,17 +23351,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -23309,7 +23504,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -24602,7 +24797,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -24710,7 +24905,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -26001,313 +26196,438 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" -msgstr "Zalety:" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." -msgstr "Łatwy do stworzenia." - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "Wady:" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" -"Teraz będziemy potrzebować płaskiej siatki zaimportowanej do Godota. " -"Uruchommy program Blender." - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 +#, fuzzy msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" +"Jak widać, ta scena ma węzeł :ref:`class_Spatial` jako swój korzeń oraz " +"wiele dzieci węzłów :ref:`class_MeshInstance`." -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "Teraz musimy przestawić widok na \"UV/Image editor\"." - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -"Ponownie wybierz wszystkie wierzchołki (\"A\"), a następnie w menu UV " -"wybierz \"Eksportuj układ UV\"." -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -"Eksportuj układ jako plik PNG. Nazwij go \"plane.png\" i zapisz w folderze " -"projektu Godota. Teraz wyeksportujmy naszą siatkę jako plik OBJ. W górnej " -"części ekranu kliknij \"Plik/Eksport/Wavefront (obj)\". Zapisz swój obiekt " -"jako \"plane.obj\" w folderze projektu Godota." -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "Otwórzmy teraz edytor Godota." - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -"Utwórz nowy projekt w uprzednio utworzonym folderze i nazwij go tak, jak " -"chcesz." -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "W naszej domyślnej scenie (3D), utwórz węzeł główny \"Spatial\"." - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -26319,6 +26639,7 @@ msgid "Part 1" msgstr "Część 1" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "Przedstawienie samouczka" @@ -26485,6 +26806,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -26503,6 +26825,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -26546,14 +26869,17 @@ msgstr "" "biegać." #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "Przygotowywanie wszystkiego" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "Otwieranie Godota i projektu z zawartymi w nim zasobami startowymi." #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -26897,8 +27223,9 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 +#, fuzzy msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -27048,9 +27375,10 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 +#, fuzzy msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" "Aby użyć lokalnego wektora kierunkowego węzła a:ref:`Spatial " "`, używamy tego kodu:" @@ -27484,11 +27812,12 @@ msgstr "" "lub wolniejszy podczas sprintu!" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "Uwagi końcowe" @@ -27524,11 +27853,12 @@ msgstr "" "przygodowych i wiele innych!" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "Jeśli kiedykolwiek się zagubisz, przeczytaj kod ponownie!" @@ -27654,9 +27984,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -27763,15 +28093,16 @@ msgstr "Spójrzmy następnie na ``set_animation``." #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 +#, fuzzy msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -27815,8 +28146,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -27846,9 +28177,11 @@ msgid "Now lets look at ``animation_ended``." msgstr "Spójrzmy teraz na ``animation_ended``." #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 +#, fuzzy msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" "``animation_ended`` jest funkcją, która zostanie wywołana przez :ref:" "`AnimationPlayer ` po zakończeniu odtwarzania " @@ -27890,8 +28223,9 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 +#, fuzzy msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -27974,7 +28308,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -28005,10 +28339,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -28031,8 +28365,8 @@ msgstr "Powtórzmy proces dla animacji strzelania z karabinu i noża!" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -28078,7 +28412,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -28104,11 +28438,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 +#, fuzzy msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" "Jednym z dwóch sposobów jest użycie obiektu pocisku. Będzie to obiekt, który " "będzie poruszał się po świecie i obsługiwał swój własny kod kolizyjny. " @@ -28127,15 +28462,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -28148,7 +28483,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -28186,9 +28521,10 @@ msgid "Battlefield (Rocket launchers, grenades, claymores, mortars, and more)" msgstr "Battlefield (wyrzutnie rakiet, granaty, miny, moździerze i inne)" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 +#, fuzzy msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" "Kolejną wadą w przypadku obiektów jest obsługa sieci. Pociski muszą " @@ -28215,7 +28551,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -28258,9 +28594,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -28298,19 +28634,20 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 +#, fuzzy msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" "Otwórz ``Bullet_Scene.tscn``. Scena zawiera węzeł :ref:`Spatial " "` zwany pociskiem, z :ref:`MeshInstance ` " "i :ref:`Area ` z dzieckiem :ref:`ColisionShape " "`." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." @@ -28318,46 +28655,46 @@ msgstr "" "Utwórz nowy skrypt o nazwie ``Bullet_script.gd`` i dołącz go do ``Bullet`` :" "ref:`Spatial `." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "Oto skrypt który kontroluje nasz pocisk:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "Przejdźmy przez ten skrypt:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "Po pierwsze zadeklarujmy kilka zmiennych w klasie:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "``BULLET_SPEED``: Prędkość z jaką podróżuje pocisk." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." @@ -28365,33 +28702,34 @@ msgstr "" "``BULLET_DAMAGE``: Obrażenia jakie zadaje pocisk z każdym kolidującym z nią " "obiektem." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +#, fuzzy +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "``timer``: Liczba zmiennoprzecinkowa określająca jak długo żyjemy." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "``hit_something``: Zmienna do śledzenia kiedy coś trafiliśmy czy nie." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -28401,37 +28739,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -28441,32 +28779,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -28475,19 +28813,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -28495,26 +28833,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -28522,7 +28860,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -28531,7 +28869,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -28540,20 +28878,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -28562,15 +28900,15 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "Tworzenie pierwszej broni" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " @@ -28580,33 +28918,33 @@ msgstr "" "``Gun_Fire_Points`` -> ``Pistol_Point``) i utwórz nowy skrypt o nazwie " "``Weapon_Pistol.gd``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "Dodaj poniższy kod do ``Weapon_Pistol.gd``:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "Sprawdźmy jak skrypt działa." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" "Najpierw definiujemy niektóre zmienne klasy, których będziemy potrzebować w " "skrypcie:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "``DAMAGE``: Liczba obrażeń jakie zadaje pojedynczy pocisk." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "``IDLE_ANIM_NAME``: Nazwa animacji bezczynności pistoletu." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "``FIRE_ANIM_NAME``: Nazwa animacji strzelania z pistoletu." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." @@ -28614,15 +28952,15 @@ msgstr "" "``is_weapon_enabled``: Zmienna służąca do sprawdzania, czy broń ta jest w " "użyciu/włączona." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "``bullet_scene``: Scena pocisku nad którą pracowaliśmy wcześniej." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "``player_node``: Zmienna do trzymania ``Player.gd``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." @@ -28630,7 +28968,7 @@ msgstr "" "Powodem, dla którego definiujemy większość tych zmiennych jest to, że możemy " "je używać w ``Player.gd``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -28640,31 +28978,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -28674,51 +29012,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -28726,23 +29064,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -28750,45 +29088,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -28796,7 +29134,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -28806,51 +29144,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -28858,13 +29196,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -28872,65 +29210,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -28938,7 +29276,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -28946,84 +29284,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "``changing_weapon_name``: Nazwa broni w którą chcemy się wyposażyć." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "Przejdźmy do tego, co się zmieniło." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -29032,24 +29370,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "Następnie przechodzimy przez każdą broń w ``weapons``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -29057,14 +29395,14 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." @@ -29072,31 +29410,31 @@ msgstr "" "Następnie ustawiamy ``current_weapon_name`` i ``changing_weapon_name`` jako " "``UNARMED``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "Na koniec otrzymujemy UI :ref:`Label ` naszego HUDa." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "Teraz wywołamy ``process_changing_weapons``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." @@ -29104,13 +29442,13 @@ msgstr "" "Najpierw otrzymujemy numer aktualnie używanej broni i przypisujemy go do " "``weapon_change_number``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -29118,14 +29456,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -29133,7 +29471,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -29143,14 +29481,14 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " @@ -29159,25 +29497,21 @@ msgstr "" "Jeśli aktualny węzeł broni nie jest równy null, a gracz jest w stanie " "``IDLE_ANIM_NAME``, ustawiamy animację gracza na ``FIRE_ANIM_NAME``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "Dodajmy następnie ``process_changing_weapons``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "Dodaj poniższy kod:" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "Zobaczmy co tu się stanie:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." @@ -29185,11 +29519,11 @@ msgstr "" "Następnie definiujemy zmienną (``weapon_unequipped``), dzięki czemu możemy " "sprawdzić, czy aktualna broń została pomyślnie wyposażona, czy nie." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "Następnie otrzymujemy broń z ``weapons``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -29198,7 +29532,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -29207,7 +29541,7 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." @@ -29215,7 +29549,7 @@ msgstr "" "Jeśli gracz z powodzeniem wyposażył się w aktualną broń (``weapon_unequipped " "== true``), to musimy wyposażyć się w nową broń." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." @@ -29223,7 +29557,7 @@ msgstr "" "Najpierw definiujemy nową zmienną (``weapon_equipped``) do śledzenia, czy " "gracz z powodzeniem wyposażył nową broń, czy też nie." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -29232,24 +29566,24 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" @@ -29257,26 +29591,27 @@ msgstr "" "Teraz musimy dodać jeszcze jedną funkcję do gracza, a następnie gracz jest " "gotowy do rozpoczęcia strzelania z broni!" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "Sprawdźmy co ta funkcja robi:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#, fuzzy msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" "Najpierw sprawdzamy, czy gracz nie zmienia broni. Jeśli gracz zmienia broń, " "to nie możemy strzelać, więc zwracamy(``return``)." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -29284,53 +29619,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "Zanim zaczniemy testować naszą grę, musimy jeszcze trochę zrobić." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "Tworzenie przedmiotów testowych" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "Teraz musimy dodać ten kod:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "Przechodźmydo tego, jak działa ``bullet_hit``:" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -29340,11 +29675,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -29357,57 +29692,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -29602,7 +29937,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -29615,7 +29950,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -29667,8 +30002,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -29857,8 +30192,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -30003,7 +30337,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -30179,8 +30513,9 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 +#, fuzzy msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" "Teraz, gdy gracz strzela z pistoletu, odtworzymy dźwięk ``pistol_shot``." @@ -30194,7 +30529,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +#, fuzzy +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "Teraz, gdy gracz przeładuje, odtworzymy dźwięk ``gun_cock``." #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -30210,8 +30546,9 @@ msgstr "" "``fire_weapon``:" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 +#, fuzzy msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" "Teraz kiedy gracz wystrzeli z karabinu, zostanie puszczony dźwięk " "``rifle_shot``." @@ -30225,8 +30562,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -30239,7 +30576,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -30324,7 +30661,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -30388,30 +30725,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -30419,109 +30756,109 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" "Stwórz nową funkcję nazywającą się ``process_view_input`` i dodaj do niej:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -30529,50 +30866,50 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 #, fuzzy msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "Dodaj skrypt do ``Mob`` i dodaj do niego następujące zmienne:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -30580,27 +30917,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -30610,7 +30947,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -30619,14 +30956,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -30635,15 +30972,15 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "Dodawanie apteczek" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." @@ -30651,18 +30988,18 @@ msgstr "" "Teraz, gdy gracz ma zdrowie i amunicję, idealnie byłoby, gdybyśmy znaleźli " "sposób na uzupełnienie tych zasobów." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "Otwórz ``Health_Pickup.tscn``." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -30670,7 +31007,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -30680,14 +31017,14 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" @@ -30695,33 +31032,33 @@ msgstr "" "Wybierz ``Health_Pickup`` i stwórz skrypt o nazwie `Health_Pickup.gd``. " "Dodać do niego:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" "Przejdźmy do tego, co robi ten skrypt, zaczynając od jego zmiennych " "klasowych:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" "``HEALTH_AMMOUNTS``: Ilość zdrowia, którą zawiera każda apteczka w każdym " "rozmiarze." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "``RESPAWN_TIME``: Czas, w sekundach, potrzebny na odrodzenie się" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." @@ -30729,7 +31066,7 @@ msgstr "" "``respawn_timer``: Zmienna służąca do śledzenia czasu oczekiwania na " "odrodzenie." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." @@ -30737,7 +31074,7 @@ msgstr "" "``is_ready``: Zmienna umożliwiająca śledzenie, czy funkcja ``ready`` została " "wywołana, czy nie." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -30745,40 +31082,41 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 +#, fuzzy msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" "Zobacz :ref:`doc_GDScript` i przejdź w dół do sekcji Eksport, aby zobaczyć " "listę argumentów których możesz użyć." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "Spójrzmy na ``_ready``:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -30786,29 +31124,30 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." -msgstr "" +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +#, fuzzy +msgid "Next let's look at ``kit_size_change``." +msgstr "Teraz spójrzmy na ``_ready``." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -30817,29 +31156,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -30848,13 +31187,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -30862,18 +31201,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -30881,39 +31220,39 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 #, fuzzy msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "Dodaj skrypt do ``Mob`` i dodaj do niego następujące zmienne:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -30921,38 +31260,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -30961,32 +31300,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "Sprawdźmy co dane funkcje robią." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -30994,7 +31333,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -31002,13 +31341,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -31016,20 +31355,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "Dodawanie niszczących się celów" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -31038,20 +31377,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -31060,70 +31399,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -31133,11 +31473,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -31145,39 +31485,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -31186,67 +31526,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -31256,34 +31596,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -31291,20 +31631,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -32352,6 +32692,7 @@ msgstr "" "zaczynała w pełni zdrowa." #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "Przejdźmy teraz przez proces ``_physics_process``." @@ -34112,15 +34453,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -37046,12 +37404,6 @@ msgstr "" msgid "An example:" msgstr "Przykład:" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animacje" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "Wprowadzanie do animacji w 2D" @@ -39080,8 +39432,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" "Na niektórych urządzeniach(smarfonach, konsolach) ta ścieżka jest unikalna " "dla każdej aplikacji. Dla systemów na komputery stacjonarne, silnik używa " @@ -39293,9 +39645,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -42992,11 +43344,13 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +#, fuzzy +msgid "Rendering 3D objects within a 2D game" msgstr "Renderowanie obiektów 3d w grze 2d" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +#, fuzzy +msgid "Rendering 2D elements in a 3D game" msgstr "Renderowanie obiektów 2d w grze 3d" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -43024,7 +43378,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -43065,10 +43419,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -43125,7 +43479,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -43196,7 +43550,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -43205,7 +43559,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -43216,7 +43570,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -43224,7 +43578,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -43232,43 +43586,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -43277,17 +43631,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -43297,7 +43651,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -43308,7 +43662,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -43320,39 +43674,39 @@ msgid "Multiple resolutions" msgstr "Wiele rozdzielczości" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" -msgstr "Bazowa rozdzielczość" +msgid "Base size" +msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 +#, fuzzy msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" "Podstawowa rozdzielczość ekranu dla projektu może być określona w " "ustawieniach projektu pod opcjami ``display``, ``window``" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -"Nie jest to jednak całkowicie oczywiste. Podczas pracy na komputerze, silnik " -"spróbuje ustawić wybraną rozdzielczość (lub użyć mniejszej, jeśli ta się nie " -"uda). W urządzeniach mobilnych, konsolach lub urządzeniach o stałej " -"rozdzielczości lub renderowaniu pełnoekranowym, rozdzielczość ta zostanie " -"zignorowana i zamiast tego zostanie użyta rozdzielczość natywna. Aby to " -"zrekompensować, Godot oferuje wiele sposobów kontrolowania rozmiaru i " -"rozciągania ekranu." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "Zmiana rozmiaru" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -43370,7 +43724,7 @@ msgstr "" "instacjowane jako jej dzieci, i zawsze można do niej uzyskać dostęp " "wywołująć ``get_tree().get_root()`` lub ``get_node(\"/root\")``)." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -43383,11 +43737,11 @@ msgstr "" "zestaw parametrów w ustawieniach projektu, mogący obsłużyć wiele " "rozdzielczości." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "Ustawienia rozciągania" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" @@ -43395,26 +43749,48 @@ msgstr "" "Ustawienia rozciągania znajdują się w ustawieniach projektu. To tylko kilka " "zmiennych konfiguracyjnych, które zapewniają kilka opcji:" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +#, fuzzy +msgid "Stretch Mode" msgstr "Tryb rozciągania" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." -msgstr "" -"**Disabled**: Pierwszym z nich jest tryb rozciągania. Domyślnie jest to " -"wyłączone, co oznacza, że nie dochodzi do rozciągania (im większy ekran lub " -"okno, tym większa rozdzielczość, zawsze pasujące piksele 1:1)." - #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 +msgid "" +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 +msgid "" +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 +#, fuzzy +msgid "" +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" "**2D**: W tym trybie rozdzielczość określona w ustawieniach wyświetlania/" "szerokości i wyświetlania/wysokości w ustawieniach projektu zostanie " @@ -43422,71 +43798,157 @@ msgstr "" "będzie renderowane w wyższej rozdzielczości), a 2D będzie renderowane na " "wyższych rozdzielczościach, tylko w powiększeniu." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 +msgid "" +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 +msgid "" +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " "This mode is useful when working with pixel-precise games, or for the sake " "of rendering to a lower resolution for improving performance." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +#, fuzzy +msgid "Stretch Aspect" msgstr "Proporcje rozciągania" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +#, fuzzy +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." msgstr "" "**Ignore**: Podczas rozciągania ekranu ignoruj współczynnik proporcji. " "Oznacza to, że rozdzielczość oryginalna zostanie rozciągnięta tak, aby " "pasowała do nowej, nawet jeśli jest szersza lub węższa." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +#, fuzzy msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." msgstr "" "**Keep**: Podczas rozciągania ekranu należy zachować proporcje obrazu. " "Oznacza to, że oryginalna rozdzielczość zostanie zachowana podczas " "dopasowywania nowej, a czarne paski zostaną dodane z boku lub na górze/" "dolnej części ekranu." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." msgstr "" -"**Keep Height**: Zachowaj format obrazu podczas rozciągania ekranu, ale " -"jeśli wynikowy ekran jest szerszy niż określona rozdzielczość, zostanie " -"rozciągnięty poziomo. Jest to zazwyczaj najlepsza opcja dla gier 2D, które " -"przewijają się poziomo." -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +#, fuzzy +msgid "Stretch Shrink" +msgstr "Ustawienia rozciągania" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +#, fuzzy +msgid "From scripts" +msgstr "Własny skrypt" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -43550,7 +44012,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "Tryby renderowania" @@ -44286,10 +44748,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -45110,7 +45568,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -45335,7 +45793,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -45401,9 +45859,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -45481,7 +45939,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -45624,7 +46082,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -45668,7 +46126,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -45685,7 +46143,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -45820,7 +46278,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -45849,8 +46307,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -45867,7 +46325,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "Wbudowane światło" @@ -45876,7 +46334,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -46022,12 +46480,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -46091,7 +46549,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -46108,261 +46566,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "**keep_data**" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "Nie czyść poprzednich danych po restarcie." -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "**disable_force**" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "Wyłączenie działającej siły." -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "**disable_velocity**" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "Czas życia cząsteczki." -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "Czas od ostatniej klatki." -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -48268,6 +48725,1918 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +#, fuzzy +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "Podczas tego kursu dowiesz się jak:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr ":ref:`RigidBody2D ` (o nazwie ``Mob``)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +#, fuzzy +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" +"Chociaż ten samouczek może być ukończony przez początkujących, zaleca się, " +"aby ukończyć przed nim :ref:`doc_your_first_game." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +#, fuzzy +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" +"Ten samouczek zakłada, że masz doświadczenie w pracy z edytorem Godota, masz " +"podstawowe doświadczenie z GDScript oraz w tworzeniu gier." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +#, fuzzy +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" +"Możesz znaleźć zasoby z tego poradnika tutaj: :download:`Godot_FPS_Starter." +"zip `" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +#, fuzzy +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" +"Dostarczone zasoby startowe zawierają animowany model 3D, kilka modeli 3D do " +"tworzenia poziomów oraz kilka scen już skonfigurowanych dla tego samouczka." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +#, fuzzy +msgid "You can find the finished project at the bottom of this page" +msgstr "Możesz znaleźć ukończony projekt dla każdej części, na dole strony" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Konfigurowanie" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +#, fuzzy +msgid "With that done, let's quickly go over what this script does." +msgstr "Sprawdźmy co dane funkcje robią." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "Poruszanie graczem" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +#, fuzzy +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "``camera``: Węzeł :ref:`Camera `." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +#, fuzzy +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" +"``is_ready``: Zmienna umożliwiająca śledzenie, czy funkcja ``ready`` została " +"wywołana, czy nie." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +#, fuzzy +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" +"``reloading_weapon``: Zmienna umożliwiająca śledzenie, czy gracz próbuje " +"obecnie przeładować broń." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +#, fuzzy +msgid "Next, let's go through ``_ready``." +msgstr "Przejdźmy teraz przez proces ``_physics_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +#, fuzzy +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" +"Najpierw otrzymujemy numer aktualnie używanej broni i przypisujemy go do " +"``weapon_change_number``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +#, fuzzy +msgid "Now, let's look at ``button_pressed``." +msgstr "Spójrzmy teraz na ``_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +#, fuzzy +msgid "Let's look at ``button_released`` next." +msgstr "Spójrzmy następnie na ``set_animation``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +#, fuzzy +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr ":ref:`ARVROrigin ` - nasz punkt startowy w świecie" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +#, fuzzy +msgid "Adding destroyable targets" +msgstr "Dodawanie niszczących się celów" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +#, fuzzy +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" +"Przejdźmy do tego, co robi ten skrypt, zaczynając od jego zmiennych " +"klasowych:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +#, fuzzy +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" +"``is_ready``: Zmienna umożliwiająca śledzenie, czy funkcja ``ready`` została " +"wywołana, czy nie." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +#, fuzzy +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" +"``grenade_timer``: Zmienna do śledzenia, kiedy granat został stworzony/" +"rzucony." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +#, fuzzy +msgid "Let's go over ``_ready``." +msgstr "Spójrzmy na ``_ready``:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +#, fuzzy +msgid "Next, let's go over ``_physics_process``." +msgstr "Przejdźmy teraz przez proces ``_physics_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +#, fuzzy +msgid "Finally, let's go over ``damage``." +msgstr "Na koniec wykonajmy kilka zmian w ``_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +#, fuzzy +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "Po pierwsze musimy się upewnić, że gracz próbuje przeładować." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +#, fuzzy +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" +"By dodać cele które niszczą się gdy otrzymają wystarczająco dużo obrażeń" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "Dodaj skrypt do ``Mob`` i dodaj do niego następujące zmienne:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +#, fuzzy +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "``spare_ammo``: Liczna amunicji która została w rezerwie dla pistoletu" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +#, fuzzy +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" +"Teraz musimy dodać ``process_reloading``. Dodaj poniższe funkcje do ``Player." +"gd``:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "Dodawanie skryptu" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Nie ma żadnych ograniczeń w stosowaniu Godota" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +#, fuzzy +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" +"``grenade_timer``: Zmienna do śledzenia, kiedy granat został stworzony/" +"rzucony." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +#, fuzzy +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "``DAMAGE``: Liczba obrażeń jakie zadaje pojedynczy pocisk." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +#, fuzzy +msgid "Next, let's look at ``_physics_process``." +msgstr "Następnie przyjrzyjmy się ``_physics_process``:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "Dodawanie dźwięku" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Dodanie amunicji" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +#, fuzzy +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" +"Przejdźmy do tego, co robi ten skrypt, zaczynając od jego zmiennych " +"klasowych:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +#, fuzzy +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" +"``grenade_mesh``: :ref:`MeshInstance ` dla granatu." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +#, fuzzy +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" +"``grenade_timer``: Zmienna do śledzenia, kiedy granat został stworzony/" +"rzucony." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +#, fuzzy +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" +"``explosion_particles``: Cząsteczki :ref:`Particles " +"`tworzące się gdy granat eksploduje." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +#, fuzzy +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "``DAMAGE``: Liczba obrażeń jakie zadaje pojedynczy pocisk." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +#, fuzzy +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" +"``grenade_timer``: Zmienna do śledzenia, kiedy granat został stworzony/" +"rzucony." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +#, fuzzy +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "``hit_something``: Zmienna do śledzenia kiedy coś trafiliśmy czy nie." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +#, fuzzy +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" +"``explosion_particles``: Cząsteczki :ref:`Particles " +"`tworzące się gdy granat eksploduje." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +#, fuzzy +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" +"``explosion_particles``: Cząsteczki :ref:`Particles " +"`tworzące się gdy granat eksploduje." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +#, fuzzy +msgid "Let's go through ``_ready``." +msgstr "Spójrzmy na ``_ready``:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +#, fuzzy +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" +"Najpierw wczytujemy węzły(node) ``camera`` i `rotation_helper`` i zapisujemy " +"je do zmiennych." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +#, fuzzy +msgid "Now let's look at ``_physics_process``." +msgstr "Spójrzmy teraz na ``_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +#, fuzzy +msgid "Finally, let's look at ``interact``." +msgstr "Spójrzmy teraz na ``_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Dodawanie skryptu" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +#, fuzzy +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" +"Przejdźmy do tego, co robi ten skrypt, zaczynając od jego zmiennych " +"klasowych:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +#, fuzzy +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "``DAMAGE``: Liczba obrażeń jakie zadaje pojedynczy pocisk." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +#, fuzzy +msgid "Let's go over ``_ready`` next." +msgstr "Spójrzmy na ``_ready``:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +#, fuzzy +msgid "Now let's go over ``body_entered_sword``." +msgstr "Spójrzmy teraz na ``_process``." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Uruchamianie gry" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +#, fuzzy +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" +"Przejdźmy do tego, co robi ten skrypt, zaczynając od jego zmiennych " +"klasowych:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +#, fuzzy +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" +"Przejdźmy do tego, co robi ten skrypt, zaczynając od jego zmiennych " +"klasowych:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +#, fuzzy +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" +"Uff! To było dużo pracy. Masz teraz w pełni działającą postać z widokiem " +"pierwszoosobowym!" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +#, fuzzy +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" +"Gotowy projekt dla tej części można pobrać tutaj: :download:" +"`Godot_FPS_Part_1.zip `" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Wtyczki" @@ -53653,8 +56022,8 @@ msgid "Compiling with Mono" msgstr "Kompilowanie z Mono" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" -msgstr "Mono (wymagana wersja jest opisana tu: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" +msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 msgid "MSBuild" @@ -53698,9 +56067,10 @@ msgstr "Tworzenie \"kleju\"(Glue)" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -53731,17 +56101,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -53759,6 +56130,61 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Linia komend" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +#, fuzzy +msgid "default: yes" +msgstr "Domyślne funkcje" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +#, fuzzy +msgid "default: #bin" +msgstr "Domyślne zachowanie" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -56369,7 +58795,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -56429,15 +58855,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -56568,7 +58990,7 @@ msgstr "ID" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -56642,20 +59064,22 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" -msgstr "" +#, fuzzy +msgid "Tangents array" +msgstr "Tangens" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" -msgstr "" +#, fuzzy +msgid "Vertex color array" +msgstr "Kolor wierzchołka" #: ../../docs/development/file_formats/tscn.rst:333 msgid "UV array 1" @@ -56666,15 +59090,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -56711,8 +59135,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -56793,7 +59217,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -57266,8 +59690,9 @@ msgstr "" "do zarządzania zgłoszeniami błędów i systemem Pull Requestów." #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" "Jeśli chcesz poprawić dokumentację, jej repozytorium znajduje się `na " @@ -59786,6 +62211,99 @@ msgstr "" "`Zeef Godot Engine: Prowadzony przez Andre Schmitza katalog zasobów `_" +#~ msgid "Pros:" +#~ msgstr "Zalety:" + +#~ msgid "Pretty easy to do." +#~ msgstr "Łatwy do stworzenia." + +#~ msgid "Cons:" +#~ msgstr "Wady:" + +#~ msgid "" +#~ "Now, we will need a plane mesh to import in Godot. Let's run Blender." +#~ msgstr "" +#~ "Teraz będziemy potrzebować płaskiej siatki zaimportowanej do Godota. " +#~ "Uruchommy program Blender." + +#~ msgid "Now, we need to switch our view to \"UV/Image editor\"." +#~ msgstr "Teraz musimy przestawić widok na \"UV/Image editor\"." + +#~ msgid "" +#~ "Select all the vertices again (\"A\") then in the UV menu, select " +#~ "\"Export UV Layout\"." +#~ msgstr "" +#~ "Ponownie wybierz wszystkie wierzchołki (\"A\"), a następnie w menu UV " +#~ "wybierz \"Eksportuj układ UV\"." + +#~ msgid "" +#~ "Export the layout as a PNG file. Name it \"plane.png\" and save it in " +#~ "your Godot project folder. Now, let's export our mesh as an OBJ file. Top " +#~ "of the screen, click \"File/Export/Wavefront (obj)\". Save your object as " +#~ "\"plane.obj\" in your Godot project folder." +#~ msgstr "" +#~ "Eksportuj układ jako plik PNG. Nazwij go \"plane.png\" i zapisz w " +#~ "folderze projektu Godota. Teraz wyeksportujmy naszą siatkę jako plik OBJ. " +#~ "W górnej części ekranu kliknij \"Plik/Eksport/Wavefront (obj)\". Zapisz " +#~ "swój obiekt jako \"plane.obj\" w folderze projektu Godota." + +#~ msgid "Let's now open Godot Editor." +#~ msgstr "Otwórzmy teraz edytor Godota." + +#~ msgid "" +#~ "Create a new project in the folder you previously created and name it " +#~ "what you want." +#~ msgstr "" +#~ "Utwórz nowy projekt w uprzednio utworzonym folderze i nazwij go tak, jak " +#~ "chcesz." + +#~ msgid "In our default scene (3D), create a root node \"Spatial\"." +#~ msgstr "W naszej domyślnej scenie (3D), utwórz węzeł główny \"Spatial\"." + +#~ msgid "Base resolution" +#~ msgstr "Bazowa rozdzielczość" + +#~ msgid "" +#~ "However, what it does is not completely obvious. When running on PC, the " +#~ "engine will attempt to set this resolution (or use something smaller if " +#~ "it fails). On mobile, consoles or devices with a fixed resolution or full " +#~ "screen rendering, this resolution will be ignored and the native " +#~ "resolution will be used instead. To compensate for this, Godot offers " +#~ "many ways to control how the screen will resize and stretch to different " +#~ "screen sizes." +#~ msgstr "" +#~ "Nie jest to jednak całkowicie oczywiste. Podczas pracy na komputerze, " +#~ "silnik spróbuje ustawić wybraną rozdzielczość (lub użyć mniejszej, jeśli " +#~ "ta się nie uda). W urządzeniach mobilnych, konsolach lub urządzeniach o " +#~ "stałej rozdzielczości lub renderowaniu pełnoekranowym, rozdzielczość ta " +#~ "zostanie zignorowana i zamiast tego zostanie użyta rozdzielczość natywna. " +#~ "Aby to zrekompensować, Godot oferuje wiele sposobów kontrolowania " +#~ "rozmiaru i rozciągania ekranu." + +#~ msgid "" +#~ "**Disabled**: The first is the stretch mode. By default this is disabled, " +#~ "which means no stretching happens (the bigger the screen or window, the " +#~ "bigger the resolution, always matching pixels 1:1)." +#~ msgstr "" +#~ "**Disabled**: Pierwszym z nich jest tryb rozciągania. Domyślnie jest to " +#~ "wyłączone, co oznacza, że nie dochodzi do rozciągania (im większy ekran " +#~ "lub okno, tym większa rozdzielczość, zawsze pasujące piksele 1:1)." + +#~ msgid "" +#~ "**Keep Height**: Keep aspect ratio when stretching the screen, but if the " +#~ "resulting screen is wider than the specified resolution, it will be " +#~ "stretched horizontally (and more horizontal resolution will be reported " +#~ "in the viewport, proportionally). This is usually the best option for 2D " +#~ "games that scroll horizontally (like runners or platformers)." +#~ msgstr "" +#~ "**Keep Height**: Zachowaj format obrazu podczas rozciągania ekranu, ale " +#~ "jeśli wynikowy ekran jest szerszy niż określona rozdzielczość, zostanie " +#~ "rozciągnięty poziomo. Jest to zazwyczaj najlepsza opcja dla gier 2D, " +#~ "które przewijają się poziomo." + +#~ msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +#~ msgstr "Mono (wymagana wersja jest opisana tu: :ref:`doc_c_sharp`)" + #~ msgid "If a parent constructor takes arguments, they are passed like this:" #~ msgstr "" #~ "Jeśli konstruktor rodzica używa argumentów, są one przekazywane w ten " diff --git a/weblate/pt_BR.po b/weblate/pt_BR.po index a6acb2f80f..af40a67451 100644 --- a/weblate/pt_BR.po +++ b/weblate/pt_BR.po @@ -48,7 +48,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-18 12:48+0000\n" "Last-Translator: Lucas Prado \n" "Language-Team: Portuguese (Brazil) ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " @@ -4340,23 +4352,23 @@ msgstr "" "informações que ela mostrar não fiquem cobertas por quaisquer elementos do " "jogo, como o jogador ou os inimigos." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "O HUD exibirá as seguintes informações:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "Pontuação, alterado por ``ScoreTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "Uma mensagem, como \"Game Over\" ou \"Prepare-se!\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "Um botão \"Iniciar\" para começar o jogo." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -4366,27 +4378,27 @@ msgstr "" "Para criar nossa interface, usaremos dois tipos de nós :ref:`Control " "`: :ref:`Label ` e :ref:`Button `." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "Crie os seguintes itens como filhos do nó ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr ":ref:`Label ` nomeado ``ScoreLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr ":ref:`Label ` nomeado ``MessageLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr ":ref:`Button ` nomeado ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr ":ref:`Timer ` nomeado ``MessageTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -4402,7 +4414,7 @@ msgstr "" "das bordas do nó Control até sua âncora. Veja :ref:" "`doc_design_interfaces_with_the_control_nodes` para mais detalhes." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" @@ -4410,7 +4422,7 @@ msgstr "" "Organize os nós conforme mostrado abaixo. Clique no botão \"Âncora\" para " "definir a âncora para um nó Control:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" @@ -4418,97 +4430,97 @@ msgstr "" "Você pode arrastar os nós para colocá-los manualmente ou, para um " "posicionamento mais preciso, usar as seguintes configurações:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "ScoreLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "``Layout``: \"Center Top\" (Centro Superior)" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "``Margin``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "Left: ``-25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "Top: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "Right: ``25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "Bottom: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "Text: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "MessageLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "``Layout``: \"Center\" (Centro)" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "Left: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "Top: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "Right: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "Bottom: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "Texto: ``Desvie dos Bichos!``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "StartButton" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "``Layout``: \"Center Bottom\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "Left: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "Top: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "Right: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "Bottom: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "Texto: ``Iniciar``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4520,13 +4532,13 @@ msgstr "" "\". Para usar esta fonte, faça o seguinte para cada um dos três nós " "``Control``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" "Na propriedade \"Custom Fonts\" (Fontes Personalizadas), escolha \"Novo " "DynamicFont\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " @@ -4537,17 +4549,17 @@ msgstr "" "Você tem também que definir o tamanho (``Size``) da fonte. Uma configuração " "de ``64`` funciona bem." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "Agora, adicione este script ao ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "O sinal ``start_game`` diz ao nó ``Main`` que o botão foi pressionado." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " @@ -4558,7 +4570,7 @@ msgstr "" "Espera) para ``2`` e configure a propriedade ``One Shot`` (Apenas uma Vez) " "como \"Ativo\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." @@ -4566,11 +4578,11 @@ msgstr "" "Esta função é chamada quando o jogador perde. Ela mostrará \"Game Over\" por " "2 segundos, depois retornará à tela de título e mostrará o botão \"Iniciar\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "Esta função é chamada em ``Main``sempre que a pontuação for alterada." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." @@ -4578,11 +4590,11 @@ msgstr "" "Conecte o sinal ``timeout()`` (\"tempo esgotado\") de ``MessageTimer`` e o " "sinal ``pressed()`` (\"pressionado\") de ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "Conectando HUD a Principal" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4594,7 +4606,7 @@ msgstr "" "``Jogador``, e coloque-a no final da árvore. A árvore completa deveria se " "parecer assim, então confira que não falta alguma coisa:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" @@ -4602,14 +4614,14 @@ msgstr "" "Agora precisamos conectar a funcionalidade de ``HUD`` ao roteiro de " "``Principal``. Isso exige algumas adições à cena ``Principal``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" "Na aba Nó, conecte o sinal ``start_game`` de HUD à função ``new_game()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" @@ -4617,12 +4629,12 @@ msgstr "" "Em ``new_game()``, atualize o mostrador de pontuação e mostre a mensagem " "\"Prepare-se\":" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" "Em ``game_over()``, precisamos chamar a correspondente função de ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" @@ -4630,7 +4642,7 @@ msgstr "" "Finalmente, adicione isto a ``_on_ScoreTimer_timeout()`` para manter o " "mostrador em sincronia com as mudanças de pontuação:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." @@ -4638,11 +4650,11 @@ msgstr "" "Agora está tudo pronto para jogar! Clique no botão \"Rodar o Projeto\". Será " "solicitada a seleção de uma cena principal, então escolha ``Principal.tscn``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "Finalizando" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " @@ -4653,12 +4665,12 @@ msgstr "" "experiência do jogo. Sinta-se livre para expandir a jogabilidade com suas " "próprias ideias." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "Plano de fundo" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4675,7 +4687,7 @@ msgstr "" "cor que goste e, com o mouse, altere as dimensões do ``ColorRect`` para que " "cubra a tela." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." @@ -4683,11 +4695,11 @@ msgstr "" "Você também pode adicionar uma imagem de plano de fundo, se tiver uma, " "usando um nó ``Sprite``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "Efeitos Sonoros" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4699,7 +4711,7 @@ msgstr "" "de áudio: \"House In a Forest Loop.ogg\" para música de fundo e \"gameover." "wav\" para quando o jogador perde." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4711,7 +4723,7 @@ msgstr "" "``SomDeMorte``. Em cada um, clique na propriedade ``Stream`` (\"fluxo\"), " "selecione \"Carregar\", e escolha o arquivo sonoro correspondente." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." @@ -4719,16 +4731,16 @@ msgstr "" "Para reproduzir a música, adicione ``$Musica.play()``na função " "``new_game()`` e ``$Musica.stop()`` na função ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "Por fim, adicione ``$SomDeMorte.play()`` na função ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Partículas" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " @@ -4738,7 +4750,7 @@ msgstr "" "ao movimento do jogador. Escolha a sua cena ``Jogador`` e adicione um nó :" "ref:`Particles2D ` chamado ``Rastro``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " @@ -4748,7 +4760,7 @@ msgstr "" "de partículas. Sinta-se à vontade para experimentar e criar diferentes " "efeitos. Para o efeito neste exemplo, use as seguintes configurações:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" @@ -4756,7 +4768,7 @@ msgstr "" "Você também precisa criar um ``Material` clicando no ```` e então em " "\"Novo ParticlesMaterial\". As configurações para isso estão a seguir:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " @@ -4766,7 +4778,7 @@ msgstr "" "nós queremos uma graduação do parâmetro alfa (transparência) do *sprite* de " "0,5 (semitransparente) até 0,0 (completamente transparente)." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" @@ -4774,7 +4786,7 @@ msgstr "" "Clique em \"Novo GradientTexture\"; depois, em \"Gradient\", clique em " "\"Novo Gradient\". Você verá uma janela como esta:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4786,7 +4798,7 @@ msgstr "" "a cor. Para a primeira cor, defina o valor ``A`` (alfa) para mais ou menos a " "metade. Já para a segunda, configure para ``0``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." @@ -4794,11 +4806,11 @@ msgstr "" "Veja :ref:`Particles2D ` para maiores detalhes sobre uso " "dos efeitos das partículas." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "Arquivos do Projeto" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -5284,7 +5296,7 @@ msgstr "" "formar as estruturas dos seus jogos. Tudo isso decorre de suas respectivas " "filosofias de design." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -5298,7 +5310,7 @@ msgstr "" "mecanismo pode se encaixar ao seu projeto, você precisa experimentá-lo por " "si mesmo e entender seu design e limitações." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." @@ -5307,11 +5319,11 @@ msgstr "" "be/4v3qge-3CqQ>`_ se você estiver procurando por uma visão geral dos " "recursos do mecanismo." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "Design e composição orientada a objetos" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " @@ -5321,7 +5333,7 @@ msgstr "" "cena flexível e hierarquia de Nós. Ele tenta ficar longe de padrões estritos " "de programação para oferecer uma maneira intuitiva de estruturar seu jogo." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -5335,11 +5347,11 @@ msgstr "" "BrokenLanterns. Mude a cor do BlinkingLight, salve e todos os BrokenLanterns " "na cidade serão atualizados instantaneamente." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "Além disso, você pode **herdar** de qualquer cena." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -5351,7 +5363,7 @@ msgstr "" "uma classe em código puro, exceto que você é livre para projetá-la usando o " "editor, usando apenas o código ou misturando e combinando os dois." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -5365,7 +5377,7 @@ msgstr "" "Ele ajuda você a criar seus projetos para que sua estrutura corresponda ao " "design do jogo." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -5377,7 +5389,7 @@ msgstr "" "árvore e sempre herdam de seus pais até a classe Node. Embora o mecanismo " "tenha componentes como formas de colisão, eles são a exceção, não a regra." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " @@ -5388,11 +5400,11 @@ msgstr "" "capacidade de desenhar formas personalizadas e renderizar com um sombreador " "personalizado." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "Pacote com tudo incluído" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -5404,7 +5416,7 @@ msgstr "" "animação, um editor de tilemaps, um editor de shaders, um depurador, um " "profiler, a capacidade de hot-reload local e em dispositivos remotos, etc." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -5416,7 +5428,7 @@ msgstr "" "que exista um plugin de importação para ele. Ou você pode criar um, como o " "`Tiled Map Importer `__." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -5428,10 +5440,11 @@ msgstr "" "as necessidades de desenvolvedores de jogos e designers de jogos, e estão " "totalmente integradas à engine e ao editor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 +#, fuzzy msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" "O GDscript permite que você escreva um código simples usando uma sintaxe " @@ -5439,7 +5452,7 @@ msgstr "" "preenchimento automático de uma linguagem estática. Também é otimizado para " "código de jogo com tipos embutidos como Vetores e Cores." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " @@ -5449,7 +5462,7 @@ msgstr "" "usando linguagens compiladas como C, C++, Rust ou Python (usando o " "compilador Cython) sem recompilar a engine." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " @@ -5459,7 +5472,7 @@ msgstr "" "bem ao editor. Você pode arrastar e soltar nós ou recursos no gráfico para " "criar novos blocos de código.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -5473,42 +5486,47 @@ msgstr "" "Godot fornece uma API completa para estender a funcionalidade do editor " "usando o código do jogo. Veja `O editor Godot é um jogo Godot`_ abaixo." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#, fuzzy msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" "*Um plugin de editor de Máquina de Estado em Godot 2 por kubecz3k. Ele " "permite gerenciar estados e transições visualmente*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "Código aberto" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#, fuzzy msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" "O Godot oferece uma base de código totalmente aberto sob a **licença MIT**. " "Isso significa que todas as tecnologias que acompanham o produto têm que ser " "Livres (como em liberdade) também. Na maior parte, eles são codificados do " "zero pelos colaboradores." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#, fuzzy msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" "Qualquer um pode conectar ferramentas proprietárias para as necessidades de " "seus projetos - elas simplesmente não são enviadas com a engine. Isso pode " "incluir o NViDia PhysX, o Google Admob ou um importador de arquivos FBX. " "Qualquer um destes pode vir como plugins de terceiros." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -5520,7 +5538,7 @@ msgstr "" "facilmente, pois o Godot irá mostrar erros com um rastreamento de pilha, " "mesmo se eles vierem da própria engine." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." @@ -5528,11 +5546,11 @@ msgstr "" "Isso **não afeta o trabalho que você faz com a Godot** de maneira alguma: " "não há strings anexadas à engine ou qualquer coisa que você faça com ela." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "Orientada pela comunidade" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -5545,7 +5563,7 @@ msgstr "" "principais desenvolvedores geralmente focam no que beneficiará a maioria dos " "usuários em primeiro lugar." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -5559,11 +5577,11 @@ msgstr "" "você verá melhorias em todos os cantos da engine ao mesmo tempo em todas as " "principais versões." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "O editor Godot é um jogo Godot" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -5576,7 +5594,7 @@ msgstr "" "você pode **usar o mesmo código** e cenas para seus jogos ou **construir " "plug-ins e estender o editor.**" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." @@ -5585,9 +5603,10 @@ msgstr "" "aciona o próprio editor. Com a palavra-chave ``tool``, você pode executar " "qualquer código de jogo no editor." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 +#, fuzzy msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" @@ -5595,9 +5614,10 @@ msgstr "" "ferramentas de Interface com Usuário do Godot para seu sistema de " "programação baseada em nós e para o resto da interface.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 +#, fuzzy msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." @@ -5607,15 +5627,16 @@ msgstr "" "plug-ins, criar plug-ins como editores de nível personalizados ou criar " "scripts com os mesmos nós e API que você usa em seus projetos." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "Engine 2D e 3D separados" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 +#, fuzzy msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" "O Godot oferece mecanismos dedicados de renderização 2D e 3D. Como " @@ -11893,9 +11914,9 @@ msgstr "Palavra-chave" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -16146,8 +16167,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #, fuzzy msgid "Built-In" msgstr "Construído" @@ -16295,10 +16316,11 @@ msgstr "" "exista apenas no caso." #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:474 +#, fuzzy msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -17629,9 +17651,10 @@ msgid "Within single line initializer braces." msgstr "Dentro de chaves de inicialização de linha única." #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 +#, fuzzy msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" "O exemplo a seguir mostra um uso adequado dos espaços, de acordo com algumas " "das convenções mencionadas acima:" @@ -17885,11 +17908,11 @@ msgstr "Godot-Blender-Exporter" msgid "Details on exporting" msgstr "Detalhes sobre exportação" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "Desativando objetos específicos" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 #, fuzzy msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " @@ -17900,7 +17923,7 @@ msgstr "" "alta resolução usados para assar). Um objeto não será exportado se não for " "renderizado na cena. Isso pode ser definido no delineador:" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." @@ -17908,12 +17931,12 @@ msgstr "" "Objetos ocultos na viewport serão exportados, mas estarão ocultos na cena " "Godot." -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 #, fuzzy msgid "Build Pipeline Integration" msgstr "Construir Integração de Pipeline" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 #, fuzzy msgid "" "If you have hundreds of model files, you don't want your artists to waste " @@ -18045,75 +18068,6 @@ msgstr "" "\"Renderização do Blender\". Quando o Blender 2.8 é lançado, este será " "removido e esta parte do exportador será alterada." -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "Luzes" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" -"Por padrão, lâmpadas no Blender possuem sombras ativadas. Isso pode causar " -"problemas de performance no Godot." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" -"Lâmpadas são exportadas usando as suas configurações no \"Blender Render\". " -"Quando o Blender 2.8 for lançado, ele será removido e essa parte do " -"exportador irá mudar." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" -"Lâmpadas sun, point e spot são todas exportadas do Blender junto com muitas " -"de suas propriedades:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "Há algumas coisas para observar:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -#, fuzzy -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" -"No Blender, uma luz ilumina todo o caminho até o infinito. Em Godot, é preso " -"pela distância de atenuação. Para corresponder mais de perto entre a " -"viewport e Godot, ative a caixa de seleção \"Esfera\". (Verde realçado)" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" -"Modelos de atenuação de luz diferem entre Godot e Blender. O exportador " -"tenta fazê-los corresponder, mas nem sempre é muito bom." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" -"Os modelos de atenuação angular do Spotlight também diferem entre Godot e " -"Blender. O exportador tenta torná-los semelhantes, mas nem sempre parece o " -"mesmo." - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" -"Não há diferença entre sombra de buffer e sombra de raio na exportação." - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "Propriedades Físicas" @@ -18191,6 +18145,13 @@ msgstr "" "colisão do objeto exportado é igual ao seu grupo de colisão. Na maioria das " "vezes, isso é o que você quer." +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "Apenas geometria de colisão" @@ -18217,6 +18178,242 @@ msgstr "" "Na maioria das vezes, você quer que sua geometria de colisão seja mostrada " "quando trabalha com os modelos, então isso funciona muito bem." +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "Luzes" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" +"Por padrão, lâmpadas no Blender possuem sombras ativadas. Isso pode causar " +"problemas de performance no Godot." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" +"Lâmpadas são exportadas usando as suas configurações no \"Blender Render\". " +"Quando o Blender 2.8 for lançado, ele será removido e essa parte do " +"exportador irá mudar." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" +"Lâmpadas sun, point e spot são todas exportadas do Blender junto com muitas " +"de suas propriedades:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "Há algumas coisas para observar:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +#, fuzzy +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" +"No Blender, uma luz ilumina todo o caminho até o infinito. Em Godot, é preso " +"pela distância de atenuação. Para corresponder mais de perto entre a " +"viewport e Godot, ative a caixa de seleção \"Esfera\". (Verde realçado)" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" +"Modelos de atenuação de luz diferem entre Godot e Blender. O exportador " +"tenta fazê-los corresponder, mas nem sempre é muito bom." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" +"Os modelos de atenuação angular do Spotlight também diferem entre Godot e " +"Blender. O exportador tenta torná-los semelhantes, mas nem sempre parece o " +"mesmo." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" +"Não há diferença entre sombra de buffer e sombra de raio na exportação." + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "Arrays" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Identificadores" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +#, fuzzy +msgid "Skeleton" +msgstr "Singletons" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animação" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animação por Sprites" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +#, fuzzy +msgid "Action Lib" +msgstr "Ação" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animação" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "Fluxo de trabalho de ativos" @@ -18774,8 +18971,9 @@ msgid "Process" msgstr "Processo" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 +#, fuzzy msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" "Alguns processos especiais podem ser aplicados a imagens quando importadas " "como textura." @@ -23767,7 +23965,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -23810,7 +24008,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -23835,10 +24033,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -23917,7 +24115,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -24008,7 +24206,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -24128,18 +24326,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -24147,108 +24345,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -24257,261 +24455,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -24520,22 +24719,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -24543,24 +24742,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -24568,11 +24767,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -24580,11 +24779,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -24592,11 +24791,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -24605,7 +24804,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -24613,22 +24812,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -24636,11 +24835,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -24650,79 +24849,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Profundidade" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -24730,17 +24929,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -24749,17 +24948,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -24906,7 +25105,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -26199,7 +26398,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -26307,7 +26506,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -27570,303 +27769,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -27878,6 +28209,7 @@ msgid "Part 1" msgstr "Parte 1" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "Introdução" @@ -28053,6 +28385,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -28072,6 +28405,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -28117,14 +28451,17 @@ msgstr "" "e correr." #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "Preparando tudo" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "Execute o Godot e abra o projeto incluso nos ativos iniciais." #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -28420,7 +28757,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -28560,8 +28897,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -28942,11 +29279,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -28976,11 +29314,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -29090,9 +29429,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -29178,7 +29517,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -29186,7 +29525,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -29222,8 +29561,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -29253,7 +29592,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -29289,7 +29629,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -29366,7 +29706,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -29392,10 +29732,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -29418,8 +29758,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -29465,7 +29805,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -29493,9 +29833,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -29510,15 +29850,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -29531,7 +29871,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -29568,7 +29908,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -29589,7 +29929,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -29632,9 +29972,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -29678,92 +30018,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -29773,37 +30113,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -29813,32 +30153,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -29847,19 +30187,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -29867,26 +30207,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -29894,7 +30234,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -29903,7 +30243,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -29912,20 +30252,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -29934,66 +30274,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -30003,31 +30343,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -30037,51 +30377,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -30089,23 +30429,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -30113,45 +30453,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -30159,7 +30499,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -30169,51 +30509,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -30221,13 +30561,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -30235,65 +30575,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -30301,7 +30641,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -30309,84 +30649,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -30395,24 +30735,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -30420,56 +30760,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -30477,14 +30817,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -30492,7 +30832,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -30502,49 +30842,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -30553,7 +30889,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -30562,19 +30898,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -30583,50 +30919,50 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 #, fuzzy msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" "Primeiro, verificamos se estamos trocando de armas ou não. Se nós estamos " "trocando de armas, nós não queremos atirar, então nós ``return``." -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -30634,53 +30970,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -30690,11 +31026,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -30707,57 +31043,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -30947,7 +31283,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -30960,7 +31296,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -31012,8 +31348,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -31199,8 +31535,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -31345,7 +31680,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -31511,7 +31846,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -31524,7 +31859,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -31539,7 +31874,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -31549,8 +31884,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -31563,7 +31898,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -31648,7 +31983,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -31712,30 +32047,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -31743,108 +32078,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -31852,18 +32187,18 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 #, fuzzy @@ -31872,32 +32207,32 @@ msgstr "" "Adicione um roteiro ao nó ``Turba`` e adicione as seguintes variáveis " "membros:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -31905,13 +32240,13 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 #, fuzzy msgid "" "We then check to see if the player is changing weapons or reloading. If the " @@ -31922,14 +32257,14 @@ msgstr "" "estivermos fazendo nenhum dos dois, arredondamos ``mouse_scroll_value`` e " "convertemos em ``int``." -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -31939,7 +32274,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -31948,14 +32283,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -31964,32 +32299,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -31997,7 +32332,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -32007,54 +32342,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -32062,38 +32397,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -32101,29 +32436,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -32132,29 +32467,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -32163,13 +32498,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -32177,18 +32512,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -32196,41 +32531,41 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 #, fuzzy msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" "Adicione um roteiro ao nó ``Turba`` e adicione as seguintes variáveis " "membros:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -32238,38 +32573,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -32278,32 +32613,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -32311,7 +32646,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -32319,13 +32654,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -32333,20 +32668,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -32355,20 +32690,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -32377,70 +32712,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -32450,11 +32786,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -32462,39 +32798,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -32503,68 +32839,68 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 #, fuzzy msgid "In this case, we want to respawn the target." msgstr "Neste caso, traduz para:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -32574,34 +32910,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -32609,20 +32945,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -33640,6 +33976,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -35404,15 +35741,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -38259,12 +38613,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animação" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -40243,8 +40591,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -40451,9 +40799,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -44152,11 +44500,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -44184,7 +44532,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -44225,10 +44573,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -44285,7 +44633,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -44352,7 +44700,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -44361,7 +44709,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -44372,7 +44720,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -44380,7 +44728,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -44388,43 +44736,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -44433,17 +44781,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -44453,7 +44801,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -44464,7 +44812,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -44476,30 +44824,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -44510,7 +44864,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -44518,89 +44872,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -44659,7 +45121,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -45395,10 +45857,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -46219,7 +46677,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -46444,7 +46902,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -46510,9 +46968,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -46590,7 +47048,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -46733,7 +47191,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -46777,7 +47235,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -46794,7 +47252,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -46929,7 +47387,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -46958,8 +47416,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -46976,7 +47434,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -46985,7 +47443,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -47131,12 +47589,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -47200,7 +47658,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -47217,261 +47675,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -49377,6 +49834,1849 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +#, fuzzy +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "Ao longo desta série, nós cobriremos como:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" +"Adicionar a habilidade de agarrar e arremessar nós :ref:`RigidBody " +"`" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +#, fuzzy +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" +"Embora este guia possa ser seguido por iniciantes, é altamente aconselhado " +"completar :ref:`doc_your_first_game` se você é novo no Godot e/ou " +"desenvolvimento de jogos **antes** de prosseguir nesta série de tutoriais." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +#, fuzzy +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" +"Este tutorial assume que você tem experiência em mexer o editor Godot, tem " +"experiência básica em programação com GDScript e tem experiência básica em " +"desenvolvimento de jogos." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +#, fuzzy +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" +"Você pode achar os ativos iniciais para este tutorial aqui: :download:" +"`Godot_FPS_Starter.zip `" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +#, fuzzy +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" +"Os ativos iniciais fornecidos contêm um modelo 3D animado, um bocado de " +"modelos 3D para fazer níveis e umas poucas cenas já configuradas para este " +"tutorial." + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +#, fuzzy +msgid "You can find the finished project at the bottom of this page" +msgstr "" +"Você pode encontrar o projeto finalizado para cada parte ao final da página " +"da respectiva parte" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Configurando" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "Movendo o Jogador" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +#, fuzzy +msgid "Adding destroyable targets" +msgstr "Adicionando uma torre" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +#, fuzzy +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" +"Adicionar a habilidade de agarrar e arremessar nós :ref:`RigidBody " +"`" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +#, fuzzy +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "Adicionar alvos que quebram quando recebem dano o suficiente" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" +"Adicione um roteiro ao nó ``Turba`` e adicione as seguintes variáveis " +"membros:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "Adicionando um script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Há algumas coisas para observar:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "Adicionando um script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Adicionando uma Função" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Adicionando um script" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Preparando o projeto" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +#, fuzzy +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" +"Você pode achar os ativos iniciais para este tutorial aqui: :download:" +"`Godot_FPS_Starter.zip `" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Plugins" @@ -54750,7 +57050,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -54795,9 +57095,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -54828,17 +57129,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -54856,6 +57158,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Tutorial de linha de comando" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -57424,7 +59779,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -57484,16 +59839,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -#, fuzzy -msgid "Skeleton" -msgstr "Singletons" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -57625,7 +59975,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -57701,19 +60051,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -57725,15 +60075,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -57770,8 +60120,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -57856,7 +60206,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -58199,10 +60549,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Além desta documentação, você também pode querer dar uma olhada nos vários " +"`Projetos de demonstração do Godot `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/pt_PT.po b/weblate/pt_PT.po index c3833e852e..f273f64878 100644 --- a/weblate/pt_PT.po +++ b/weblate/pt_PT.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-14 16:41+0000\n" "Last-Translator: BannerGames \n" "Language-Team: Portuguese (Portugal) ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3337,109 +3348,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3447,55 +3458,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3503,57 +3514,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3563,17 +3574,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3581,7 +3592,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3589,55 +3600,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Partículas" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3645,17 +3656,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4003,7 +4014,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4012,24 +4023,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4038,11 +4049,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4050,7 +4061,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4059,7 +4070,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4067,18 +4078,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4086,7 +4097,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4094,7 +4105,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4102,28 +4113,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4132,32 +4143,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Recursos" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4165,17 +4178,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4183,7 +4196,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4192,11 +4205,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4204,36 +4217,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8760,9 +8773,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12173,8 +12186,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12292,7 +12305,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13347,7 +13360,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13539,28 +13552,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13651,58 +13664,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13763,6 +13724,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13782,6 +13750,222 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Identificadores" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animação" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animação" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animação" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14221,7 +14405,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19193,7 +19377,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19236,7 +19420,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19261,10 +19445,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19343,7 +19527,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19434,7 +19618,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19554,18 +19738,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19573,108 +19757,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19683,261 +19867,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19946,22 +20131,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19969,24 +20154,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19994,11 +20179,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20006,11 +20191,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20018,11 +20203,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20031,7 +20216,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20039,22 +20224,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20062,11 +20247,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20076,79 +20261,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Profundidade" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20156,17 +20341,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20175,17 +20360,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20328,7 +20513,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21621,7 +21806,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21729,7 +21914,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22992,303 +23177,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23300,6 +23617,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23446,6 +23764,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23460,6 +23779,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23495,14 +23815,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23781,7 +24104,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23920,8 +24243,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24302,11 +24625,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24336,11 +24660,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24450,9 +24775,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24538,7 +24863,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24546,7 +24871,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24582,8 +24907,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24613,7 +24938,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24649,7 +24975,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24726,7 +25052,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24752,10 +25078,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24778,8 +25104,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24825,7 +25151,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24853,9 +25179,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24870,15 +25196,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24891,7 +25217,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24928,7 +25254,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24949,7 +25275,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24992,9 +25318,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25032,92 +25358,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25127,37 +25453,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25167,32 +25493,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25201,19 +25527,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25221,26 +25547,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25248,7 +25574,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25257,7 +25583,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25266,20 +25592,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25288,66 +25614,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25357,31 +25683,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25391,51 +25717,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25443,23 +25769,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25467,45 +25793,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25513,7 +25839,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25523,51 +25849,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25575,13 +25901,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25589,65 +25915,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25655,7 +25981,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25663,84 +25989,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25749,24 +26075,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25774,56 +26100,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25831,14 +26157,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25846,7 +26172,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25856,49 +26182,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25907,7 +26229,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25916,19 +26238,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25937,47 +26259,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25985,53 +26307,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26041,11 +26363,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26058,57 +26380,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26295,7 +26617,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26308,7 +26630,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26360,8 +26682,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26544,8 +26866,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26690,7 +27011,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26856,7 +27177,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26869,7 +27190,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26884,7 +27205,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26894,8 +27215,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26908,7 +27229,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26993,7 +27314,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27057,30 +27378,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27088,108 +27409,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27197,49 +27518,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27247,27 +27568,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27277,7 +27598,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27286,14 +27607,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27302,32 +27623,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27335,7 +27656,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27345,54 +27666,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27400,38 +27721,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27439,29 +27760,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27470,29 +27791,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27501,13 +27822,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27515,18 +27836,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27534,38 +27855,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27573,38 +27894,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27613,32 +27934,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27646,7 +27967,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27654,13 +27975,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27668,20 +27989,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27690,20 +28011,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27712,70 +28033,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27785,11 +28107,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27797,39 +28119,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27838,67 +28160,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27908,34 +28230,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27943,20 +28265,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28967,6 +29289,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30722,15 +31045,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33561,12 +33901,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animação" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35538,8 +35872,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35746,9 +36080,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39445,11 +39779,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39477,7 +39811,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39518,10 +39852,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39578,7 +39912,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39645,7 +39979,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39654,7 +39988,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39665,7 +39999,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39673,7 +40007,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39681,43 +40015,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39726,17 +40060,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39746,7 +40080,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39757,7 +40091,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39769,30 +40103,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39803,7 +40143,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39811,89 +40151,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39952,7 +40400,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40688,10 +41136,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41512,7 +41956,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41737,7 +42181,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41803,9 +42247,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41883,7 +42327,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42026,7 +42470,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42070,7 +42514,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42087,7 +42531,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42222,7 +42666,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42251,8 +42695,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42269,7 +42713,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42278,7 +42722,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42424,12 +42868,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42493,7 +42937,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42510,261 +42954,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44670,6 +45113,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Plugins" @@ -50038,7 +52283,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50083,9 +52328,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50116,17 +52362,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50144,6 +52391,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Condição" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52705,7 +55005,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52765,15 +55065,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52905,7 +55201,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52979,19 +55275,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53003,15 +55299,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53048,8 +55344,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53132,7 +55428,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53476,7 +55772,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/ro.po b/weblate/ro.po index 9b9554e186..c1717418dd 100644 --- a/weblate/ro.po +++ b/weblate/ro.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-17 19:40+0000\n" "Last-Translator: Calin Sopterean \n" "Language-Team: Romanian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3298,109 +3309,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3408,55 +3419,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3464,57 +3475,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3524,17 +3535,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3542,7 +3553,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3550,55 +3561,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3606,17 +3617,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3963,7 +3974,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3972,24 +3983,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3998,11 +4009,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4010,7 +4021,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4019,7 +4030,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4027,18 +4038,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4046,7 +4057,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4054,7 +4065,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4062,28 +4073,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4092,32 +4103,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4125,17 +4137,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4143,7 +4155,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4152,11 +4164,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4164,36 +4176,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8720,9 +8732,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12124,8 +12136,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12243,7 +12255,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13298,7 +13310,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13490,28 +13502,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13602,58 +13614,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13713,6 +13673,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13732,6 +13699,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animație" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animație" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14171,7 +14352,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19143,7 +19324,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19186,7 +19367,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19211,10 +19392,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19293,7 +19474,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19384,7 +19565,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19504,18 +19685,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19523,108 +19704,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19633,261 +19814,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19896,22 +20078,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19919,24 +20101,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19944,11 +20126,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19956,11 +20138,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19968,11 +20150,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19981,7 +20163,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19989,22 +20171,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20012,11 +20194,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20026,79 +20208,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Adâncime" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20106,17 +20288,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20125,17 +20307,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20278,7 +20460,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21571,7 +21753,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21679,7 +21861,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22942,303 +23124,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23250,6 +23564,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23396,6 +23711,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23410,6 +23726,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23445,14 +23762,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23731,7 +24051,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23870,8 +24190,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24252,11 +24572,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24286,11 +24607,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24400,9 +24722,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24488,7 +24810,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24496,7 +24818,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24532,8 +24854,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24563,7 +24885,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24599,7 +24922,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24676,7 +24999,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24702,10 +25025,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24728,8 +25051,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24775,7 +25098,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24803,9 +25126,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24820,15 +25143,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24841,7 +25164,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24878,7 +25201,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24899,7 +25222,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24942,9 +25265,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24982,92 +25305,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25077,37 +25400,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25117,32 +25440,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25151,19 +25474,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25171,26 +25494,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25198,7 +25521,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25207,7 +25530,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25216,20 +25539,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25238,66 +25561,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25307,31 +25630,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25341,51 +25664,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25393,23 +25716,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25417,45 +25740,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25463,7 +25786,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25473,51 +25796,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25525,13 +25848,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25539,65 +25862,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25605,7 +25928,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25613,84 +25936,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25699,24 +26022,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25724,56 +26047,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25781,14 +26104,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25796,7 +26119,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25806,49 +26129,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25857,7 +26176,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25866,19 +26185,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25887,47 +26206,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25935,53 +26254,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25991,11 +26310,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26008,57 +26327,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26245,7 +26564,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26258,7 +26577,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26310,8 +26629,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26494,8 +26813,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26640,7 +26958,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26806,7 +27124,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26819,7 +27137,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26834,7 +27152,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26844,8 +27162,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26858,7 +27176,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26943,7 +27261,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27007,30 +27325,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27038,108 +27356,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27147,49 +27465,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27197,27 +27515,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27227,7 +27545,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27236,14 +27554,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27252,32 +27570,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27285,7 +27603,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27295,54 +27613,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27350,38 +27668,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27389,29 +27707,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27420,29 +27738,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27451,13 +27769,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27465,18 +27783,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27484,38 +27802,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27523,38 +27841,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27563,32 +27881,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27596,7 +27914,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27604,13 +27922,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27618,20 +27936,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27640,20 +27958,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27662,70 +27980,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27735,11 +28054,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27747,39 +28066,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27788,67 +28107,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27858,34 +28177,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27893,20 +28212,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28917,6 +29236,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30672,15 +30992,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33511,12 +33848,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animație" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35488,8 +35819,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35696,9 +36027,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39395,11 +39726,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39427,7 +39758,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39468,10 +39799,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39528,7 +39859,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39595,7 +39926,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39604,7 +39935,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39615,7 +39946,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39623,7 +39954,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39631,43 +39962,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39676,17 +40007,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39696,7 +40027,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39707,7 +40038,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39719,30 +40050,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39753,7 +40090,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39761,89 +40098,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39902,7 +40347,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40638,10 +41083,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41462,7 +41903,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41687,7 +42128,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41753,9 +42194,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41833,7 +42274,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41976,7 +42417,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42020,7 +42461,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42037,7 +42478,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42172,7 +42613,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42201,8 +42642,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42219,7 +42660,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42228,7 +42669,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42374,12 +42815,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42443,7 +42884,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42460,261 +42901,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44620,6 +45060,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Plugin-uri" @@ -49988,7 +52230,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50033,9 +52275,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50066,17 +52309,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50094,6 +52338,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52653,7 +54949,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52712,15 +55008,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52851,7 +55143,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52925,19 +55217,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52949,15 +55241,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52994,8 +55286,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53075,7 +55367,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53419,7 +55711,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/ru.po b/weblate/ru.po index fdf0e229e4..40c5228921 100644 --- a/weblate/ru.po +++ b/weblate/ru.po @@ -42,7 +42,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-18 12:48+0000\n" "Last-Translator: Alex \n" "Language-Team: Russian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " @@ -4314,23 +4326,23 @@ msgstr "" "элементы UI поверх всей игры. Это значит, что отображаемая информация не " "перекрывается никакими игровыми элементами, такими как игрок или мобы." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "HUD отображает следующую информацию:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "Счет, измененный ``ScoreTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "Сообщение, например \"Game Over\" или \"Get Ready!\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "Кнопка \"Start\" чтобы начать игру." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -4341,27 +4353,27 @@ msgstr "" "`Control ` nodes: :ref:`Label ` и :ref:`Button " "`." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "Создайте следующее в качестве потомка узла '' HUD'':" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr ":ref:`Label` названный ``ScoreLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr ":ref:`Label ` названный ``MessageLabel``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr ":ref:`Кнопка ` с именем ``StartButton``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr ":ref:`Timer ` названный ``MessageTimer``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -4378,7 +4390,7 @@ msgstr "" "`doc_design_interfaces_with_the_control_nodes` для получения более подробной " "информации." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" @@ -4386,7 +4398,7 @@ msgstr "" "Организуйте узлы, как показано ниже. Нажмите кнопку \"Якорь\" для установки " "узла управления якорем:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" @@ -4394,97 +4406,97 @@ msgstr "" "Можно перетаскивать узлы, чтобы разместить их вручную, или для более точного " "размещения, используйте следующие параметры:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "Надпись счёта" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "``Layout``: \"Center Top\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "``Margin``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "Left: ``-25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "Top: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "Right: ``25``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "Bottom: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "Text: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "MessageLabel" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "``Layout``: \"Center\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "Left: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "Top: ``-150``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "Right: ``200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "Bottom: ``0``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "Text: ``Dodge the Creeps!``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "StartButton" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "``Layout``: \"Center Bottom\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "Left: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "Top: ``-200``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "Right: ``100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "Bottom: ``-100``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "Text: ``Start``" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4496,11 +4508,11 @@ msgstr "" "Regular.ttf\". Чтобы использовать этот шрифт, выполните следующие действия " "для каждой из трех узлов ``Control``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "Под \"Custom Fonts\", выберите \"New DynamicFont\"" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " @@ -4510,17 +4522,17 @@ msgstr "" "\" и выберите \"Xolonium-Regular.ttf\" . Необходимо также установить размер " "шрифта ``Size``. Значение ``64`` работает хорошо." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "Теперь добавьте этот сценарий '' HUD'':" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "Сигнал ``start_game`` сообщает узлу ``Main``, что кнопка была нажата." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " @@ -4530,7 +4542,7 @@ msgstr "" "например, \"приготовиться\". На ``MessageTimer``, измените ``Wait Time`` до " "``2`` и измените ``One Shot`` установить на \"On\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." @@ -4539,11 +4551,11 @@ msgstr "" "Over\" на 2 секунды, затем вернуться к экрану названия и появится кнопка " "\"Start\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "Эта функция вызывается в ``Main`` всякий раз, когда изменяется оценка." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." @@ -4551,11 +4563,11 @@ msgstr "" "Соедините \"timeout()\" сигнал из \"MessageTimer\" и сигнал \"pressed()\" из " "\"StartButton\"." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "Подключение к главной HUD" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4566,7 +4578,7 @@ msgstr "" "``HUD`` сцену поместите в нижнюю часть дерева ``Main``. Дерево должно " "выглядеть так, поэтому убедитесь, что вы ничего не пропустили:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" @@ -4574,7 +4586,7 @@ msgstr "" "Теперь нам нужно подключить ``HUD`` функцию для ``Main`` скрипта. Для этого " "требуется несколько дополнений к ``Main`` сцены:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." @@ -4582,18 +4594,18 @@ msgstr "" "Во вкладке Узел подключите к HUD сигнал ``start_game`` и ``new_game()`` " "функций." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" "В ``new_game()``, обновит счет дисплея и покажет сообщение \"Get Ready\":" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "В ``game_over()`` нам нужно вызвать соответствующую функцию ``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" @@ -4601,7 +4613,7 @@ msgstr "" "Наконец добавьте в ``_on_ScoreTimer_timeout()`` для синхронизации " "отображения с меняющемся очками:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." @@ -4609,11 +4621,11 @@ msgstr "" "Теперь вы готовы к игре! Нажмите на кнопку \"Запустить проект\" или F5. Вам " "будет предложено выбрать основную сцену, выбирайте ``Main.tscn``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "Завершение" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " @@ -4624,12 +4636,12 @@ msgstr "" "игрового опыта. Не стесняйтесь совершенствовать геймплей вашими собственными " "идеями." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "Фон" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4645,7 +4657,7 @@ msgstr "" "свойство: ``Color``. Выберите цвет, который вам нравится и измените размер " "``ColorRect``, так чтобы он покрывал экран." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." @@ -4653,11 +4665,11 @@ msgstr "" "Вы также можете добавить фоновое изображение, если у вас оно есть, с помощью " "``Sprite``узла." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "Звуковые эффекты" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4669,7 +4681,7 @@ msgstr "" "файла: \"House In a Forest Loop.ogg\" для фоновой музыки и \"gameover.wav\", " "когда игрок проигрывает." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4681,7 +4693,7 @@ msgstr "" "``DeathSound``. На каждом из них, нажмите на кнопку ``Stream`` свойствах " "выберите \"загрузить\" и добавьте соответствующий звуковой файл." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." @@ -4689,16 +4701,16 @@ msgstr "" "Для воспроизведения музыки, добавьте ``$Music.play()`` функцию в " "``new_game()`` и ``$Music.stop()`` в ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "Наконец, добавить ``$DeathSound.play()`` в ``game_over()``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Частицы" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " @@ -4708,7 +4720,7 @@ msgstr "" "игрока. Выберите свою ``Player`` сцену и добавьте :ref:`Particles2D " "` узел под названием ``Trail``." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " @@ -4718,7 +4730,7 @@ msgstr "" "стесняйтесь экспериментировать и создавать различные эффекты. Для эффекта в " "этом примере используйте следующие параметры:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" @@ -4726,7 +4738,7 @@ msgstr "" "Также нужно создать ``Material``, нажав на ````, а затем на \"New " "ParticlesMaterial\". Параметры для этого приведены ниже:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " @@ -4736,7 +4748,7 @@ msgstr "" "градиент, принимал alpha (прозрачность) спрайта от 0.5 (полупрозрачным) до " "0,0 (полностью прозрачный)." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" @@ -4744,7 +4756,7 @@ msgstr "" "Нажмите кнопку \"Новый GradientTexture\", в \"Gradient\", нажмите кнопку " "\"Новый Gradient\". Вы увидите окно, как это:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4756,7 +4768,7 @@ msgstr "" "''A'' (альфа) сдвинуть ползунок на половину. Для второго установите ползунок " "до конца в ''0''." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." @@ -4764,11 +4776,11 @@ msgstr "" "См. :ref:`Particles2D ` для более подробной информации по " "использованию эффекта частиц." -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "Файлы проекта" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -5246,7 +5258,7 @@ msgstr "" "Это приводит к разным рабочим процессам и различным способам формирования " "структур ваших игр. Все это вытекает из их соответствующих концепций дизайна." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -5259,7 +5271,7 @@ msgstr "" "сравнение различных движков. Чтобы понять, хорошо ли подходит некий движок в " "проект, его необходимо попробовать и понять его архитектуру и ограничения." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." @@ -5267,11 +5279,11 @@ msgstr "" "Пожалуйста посмотрите `Открытие Godot 3, свободный игровой движок `_, если вы ищете обзор возможностей движка." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "Объектно-ориентированный дизайн и композиция" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " @@ -5282,7 +5294,7 @@ msgstr "" "программирования, чтобы предложить интуитивный способ структурирования вашей " "игры." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -5296,11 +5308,11 @@ msgstr "" "такими фонарями. Потом поменять цвет мерцания, сохранить объект, и все " "фонари тут же обновятся." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "Более того, вы можете **наследовать** от любой сцены." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -5312,7 +5324,7 @@ msgstr "" "исключением лишь того, что вы сами создаёте всё сами, используя Редактор, " "только код или и то, и другое одновременно." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -5326,7 +5338,7 @@ msgstr "" "и \"Маг\" также будет обновлен. Это помогает вам строить ваши проекты таким " "образом, что их структура соответствует игровому дизайну." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -5339,7 +5351,7 @@ msgstr "" "в движке есть компоненты, например формы столкновения, они являются скорее " "исключением, чем нормой." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " @@ -5349,11 +5361,11 @@ msgstr "" "родительских классов, таких как преобразования или возможность рисовать " "пользовательские фигуры и рендериться с помощью настраиваемого шейдера." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "Комплексный" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -5366,7 +5378,7 @@ msgstr "" "возможность перезагрузки на ходу локально и на удаленных устройствах и " "многое другое." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -5378,7 +5390,7 @@ msgstr "" "них есть плагин импорта. Или вы можете создать его, например, `Tiled Map " "Importer `." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -5390,10 +5402,11 @@ msgstr "" "нужд разработчиков и гейм дизайнеров и тесно интегрированы в движок и " "редактор." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 +#, fuzzy msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" "GDscript позволяет писать простой код с использованием синтаксиса, похожего " @@ -5401,7 +5414,7 @@ msgstr "" "автозаполнения статического языка. Он также оптимизирован для написания кода " "игрового процесса со встроенными типами, такими как Vectors и Colors." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " @@ -5412,7 +5425,7 @@ msgstr "" "как C, C ++, Rust или Python (с использованием компилятора Cython) без " "перекомпиляции движка." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " @@ -5422,7 +5435,7 @@ msgstr "" "интегрируется в редактор. Вы можете перетаскивать узлы или ресурсы в граф " "для создания новых блоков кода.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -5437,41 +5450,46 @@ msgstr "" "функциональности редактора, используя код игры. См. `Редактор Godot - это " "игра Godot`_ ниже." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#, fuzzy msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" "*Плагин State Machine (Машина Состояний) в Godot 2 от kubecz3k. Он позволяет " "визуально управлять состояниями и переходами*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "Открытый исходный код" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#, fuzzy msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" "Godot предлагает полностью открытую кодовую базу под лицензией **MIT.** Это " "означает, что все технологии, которые поставляются с ней, должны быть " "бесплатными (как свобода). По большей части, они кодируются авторами с нуля." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#, fuzzy msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" "Любой может подключить проприетарные инструменты для нужд своих проектов - " "они не будут поставляться с движком. Это может быть Nvidia PhysX, Google " "Admob или импортер файлов FBX. Любой из них может использоваться как " "сторонний плагин." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -5483,7 +5501,7 @@ msgstr "" "отлаживать игры, поскольку Godot будет печатать ошибки с трассировкой стека, " "даже если они исходят из самого движка." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." @@ -5491,11 +5509,11 @@ msgstr "" "В любом случае, это **не влияет на работу, которую вы совершаете с Godot**: " "никаких условий для движка или всего, что вы делаете с ним, нет." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "Управляемый сообществом" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -5508,7 +5526,7 @@ msgstr "" "фокусируются на то, что в первую очередь принесет пользу большинству " "пользователей." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -5521,11 +5539,11 @@ msgstr "" "над функциями, которые им могут понадобиться сами, поэтому во всех основных " "версиях вы увидите улучшения во всех углах движка." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "Редактор Godot - это игра Godot" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -5538,7 +5556,7 @@ msgstr "" "означает, что вы можете **использовать один и тот же код** и сцены для своих " "игр или **создавать плагины и расширять редактор.**" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." @@ -5547,9 +5565,10 @@ msgstr "" "интерфейса, поскольку она сама настраивает редактор. С ключевым словом " "``tool`` вы можете запускать любой игровой код в редакторе." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 +#, fuzzy msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" @@ -5557,9 +5576,10 @@ msgstr "" "использует инструменты пользовательского интерфейса Godot для своей системы " "программирования на основе узлов и для остальной части интерфейса.*" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 +#, fuzzy msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." @@ -5569,15 +5589,16 @@ msgstr "" "создавать плагины, такие как настраиваемые редакторы уровней, или создавать " "скрипты с теми же узлами и API, которые вы используете в своих проектах." -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "Отдельные 2D и 3D движки" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 +#, fuzzy msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" "Godot предлагает специализированные 2D и 3D движки. В итоге **базовая " @@ -10295,9 +10316,9 @@ msgstr "Ключевое слово" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -13883,8 +13904,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -14002,7 +14023,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -15057,7 +15078,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -15249,28 +15270,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -15361,58 +15382,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "Есть некоторые вещи, которые следует отметить:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -15473,6 +15442,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -15492,6 +15468,222 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "Есть некоторые вещи, которые следует отметить:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "Массив" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Идентификаторы" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Анимация" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Спрайтовая Анимация" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -15931,7 +16123,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -20905,7 +21097,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -20948,7 +21140,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -20973,10 +21165,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -21055,7 +21247,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -21146,7 +21338,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -21266,18 +21458,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -21285,108 +21477,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -21395,261 +21587,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -21658,22 +21851,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -21681,24 +21874,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -21706,11 +21899,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -21718,11 +21911,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -21730,11 +21923,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -21743,7 +21936,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -21751,22 +21944,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -21774,11 +21967,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -21788,79 +21981,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Глубина" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -21868,17 +22061,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -21887,17 +22080,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -22040,7 +22233,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -23333,7 +23526,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -23441,7 +23634,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -24704,303 +24897,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -25012,6 +25337,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -25158,6 +25484,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -25172,6 +25499,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -25207,14 +25535,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -25493,7 +25824,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -25632,8 +25963,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -26014,11 +26345,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -26048,11 +26380,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -26162,9 +26495,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -26250,7 +26583,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -26258,7 +26591,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -26294,8 +26627,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -26325,7 +26658,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -26361,7 +26695,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -26438,7 +26772,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -26464,10 +26798,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -26490,8 +26824,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -26537,7 +26871,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -26565,9 +26899,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -26582,15 +26916,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -26603,7 +26937,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -26640,7 +26974,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -26661,7 +26995,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -26704,9 +27038,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -26744,92 +27078,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -26839,37 +27173,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -26879,32 +27213,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -26913,19 +27247,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -26933,26 +27267,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -26960,7 +27294,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -26969,7 +27303,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -26978,20 +27312,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -27000,66 +27334,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -27069,31 +27403,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -27103,51 +27437,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -27155,23 +27489,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -27179,45 +27513,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -27225,7 +27559,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -27235,51 +27569,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -27287,13 +27621,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -27301,65 +27635,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -27367,7 +27701,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -27375,84 +27709,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -27461,24 +27795,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -27486,56 +27820,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -27543,14 +27877,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -27558,7 +27892,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -27568,49 +27902,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -27619,7 +27949,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -27628,19 +27958,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -27649,47 +27979,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -27697,53 +28027,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -27753,11 +28083,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -27770,57 +28100,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -28007,7 +28337,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -28020,7 +28350,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -28072,8 +28402,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -28258,8 +28588,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -28404,7 +28733,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -28570,7 +28899,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -28583,7 +28912,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -28598,7 +28927,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -28608,8 +28937,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -28622,7 +28951,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -28707,7 +29036,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -28771,30 +29100,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -28802,108 +29131,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -28911,49 +29240,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "Откройте ``Player.gd`` и добавьте следующие переменные класса:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -28961,27 +29290,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -28991,7 +29320,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -29000,14 +29329,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -29016,32 +29345,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -29049,7 +29378,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -29059,54 +29388,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -29114,38 +29443,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -29153,29 +29482,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -29184,29 +29513,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -29215,13 +29544,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -29229,18 +29558,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -29248,38 +29577,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "Откройте ``Player.gd`` и добавьте следующие переменные класса:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -29287,38 +29616,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -29327,32 +29656,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -29360,7 +29689,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -29368,13 +29697,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -29382,20 +29711,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -29404,20 +29733,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -29426,70 +29755,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -29499,11 +29829,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -29511,39 +29841,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -29552,67 +29882,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -29622,34 +29952,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -29657,20 +29987,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -30681,6 +31011,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -32436,15 +32767,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -35413,12 +35761,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Анимация" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -37390,8 +37732,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -37598,9 +37940,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -41304,11 +41646,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -41336,7 +41678,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -41379,10 +41721,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -41439,7 +41781,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -41506,7 +41848,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -41515,7 +41857,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -41526,7 +41868,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -41534,7 +41876,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -41542,43 +41884,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -41587,17 +41929,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -41607,7 +41949,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -41618,7 +41960,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -41630,30 +41972,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -41664,7 +42012,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -41672,89 +42020,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -41823,7 +42279,7 @@ msgstr "\"particles\": Для систем частиц." #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "Опции Отрисовки" @@ -42575,10 +43031,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -43399,7 +43851,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -43624,7 +44076,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -43690,9 +44142,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -43770,7 +44222,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -43913,7 +44365,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -43957,7 +44409,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -43974,7 +44426,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -44109,7 +44561,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -44138,8 +44590,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -44156,7 +44608,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -44165,7 +44617,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -44311,12 +44763,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -44380,7 +44832,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -44397,261 +44849,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -46590,6 +47041,1819 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr ":ref:`RigidBody2D ` (названный ``Mob``)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Написание сценариев (скриптов)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "Движение Игрока" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +#, fuzzy +msgid "Adding destroyable targets" +msgstr "Сложение векторов" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "Откройте ``Player.gd`` и добавьте следующие переменные класса:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "Добавление сценария" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Есть некоторые вещи, которые следует отметить:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "Добавление сценария" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Добавление сценария" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Добавление сценария" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Подготовка проекта" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Плагины" @@ -51959,7 +54223,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -52004,9 +54268,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -52037,17 +54302,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -52065,6 +54331,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Условие" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -54624,7 +56943,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -54684,15 +57003,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -54823,7 +57138,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -54899,19 +57214,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -54923,15 +57238,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -54968,8 +57283,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -55052,7 +57367,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -55395,10 +57710,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"В дополнение к этой документации вы также можете посмотреть на различные " +"`демонстрационные проекты Godot `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/sk.po b/weblate/sk.po index 235f9613ab..b88da16cd2 100644 --- a/weblate/sk.po +++ b/weblate/sk.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-15 17:43+0000\n" "Last-Translator: MineGame 159 \n" "Language-Team: Slovak ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3248,109 +3259,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3358,55 +3369,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3414,57 +3425,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3474,17 +3485,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3492,7 +3503,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3500,55 +3511,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3556,17 +3567,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3913,7 +3924,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3922,24 +3933,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3948,11 +3959,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3960,7 +3971,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3969,7 +3980,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3977,18 +3988,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -3996,7 +4007,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4004,7 +4015,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4012,28 +4023,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4042,32 +4053,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4075,17 +4087,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4093,7 +4105,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4102,11 +4114,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4114,36 +4126,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8670,9 +8682,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12074,8 +12086,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12193,7 +12205,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13248,7 +13260,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13440,28 +13452,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13552,58 +13564,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13663,6 +13623,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13682,6 +13649,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14121,7 +14301,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19093,7 +19273,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19136,7 +19316,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19161,10 +19341,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19243,7 +19423,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19334,7 +19514,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19454,18 +19634,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19473,108 +19653,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19583,261 +19763,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19846,22 +20027,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19869,24 +20050,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19894,11 +20075,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19906,11 +20087,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19918,11 +20099,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19931,7 +20112,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19939,22 +20120,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19962,11 +20143,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19976,79 +20157,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20056,17 +20237,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20075,17 +20256,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20228,7 +20409,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21521,7 +21702,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21629,7 +21810,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22892,303 +23073,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23200,6 +23513,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23346,6 +23660,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23360,6 +23675,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23395,14 +23711,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23681,7 +24000,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23820,8 +24139,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24202,11 +24521,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24236,11 +24556,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24350,9 +24671,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24438,7 +24759,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24446,7 +24767,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24482,8 +24803,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24513,7 +24834,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24549,7 +24871,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24626,7 +24948,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24652,10 +24974,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24678,8 +25000,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24725,7 +25047,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24753,9 +25075,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24770,15 +25092,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24791,7 +25113,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24828,7 +25150,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24849,7 +25171,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24892,9 +25214,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24932,92 +25254,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25027,37 +25349,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25067,32 +25389,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25101,19 +25423,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25121,26 +25443,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25148,7 +25470,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25157,7 +25479,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25166,20 +25488,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25188,66 +25510,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25257,31 +25579,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25291,51 +25613,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25343,23 +25665,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25367,45 +25689,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25413,7 +25735,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25423,51 +25745,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25475,13 +25797,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25489,65 +25811,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25555,7 +25877,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25563,84 +25885,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25649,24 +25971,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25674,56 +25996,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25731,14 +26053,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25746,7 +26068,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25756,49 +26078,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25807,7 +26125,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25816,19 +26134,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25837,47 +26155,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25885,53 +26203,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25941,11 +26259,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25958,57 +26276,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26195,7 +26513,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26208,7 +26526,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26260,8 +26578,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26444,8 +26762,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26590,7 +26907,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26756,7 +27073,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26769,7 +27086,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26784,7 +27101,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26794,8 +27111,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26808,7 +27125,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26893,7 +27210,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26957,30 +27274,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -26988,108 +27305,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27097,49 +27414,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27147,27 +27464,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27177,7 +27494,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27186,14 +27503,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27202,32 +27519,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27235,7 +27552,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27245,54 +27562,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27300,38 +27617,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27339,29 +27656,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27370,29 +27687,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27401,13 +27718,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27415,18 +27732,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27434,38 +27751,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27473,38 +27790,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27513,32 +27830,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27546,7 +27863,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27554,13 +27871,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27568,20 +27885,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27590,20 +27907,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27612,70 +27929,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27685,11 +28003,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27697,39 +28015,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27738,67 +28056,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27808,34 +28126,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27843,20 +28161,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28867,6 +29185,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30622,15 +30941,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33461,12 +33797,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35438,8 +35768,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35646,9 +35976,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39345,11 +39675,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39377,7 +39707,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39418,10 +39748,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39478,7 +39808,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39545,7 +39875,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39554,7 +39884,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39565,7 +39895,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39573,7 +39903,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39581,43 +39911,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39626,17 +39956,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39646,7 +39976,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39657,7 +39987,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39669,30 +39999,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39703,7 +40039,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39711,89 +40047,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39852,7 +40296,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40588,10 +41032,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41412,7 +41852,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41637,7 +42077,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41703,9 +42143,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41783,7 +42223,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41926,7 +42366,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41970,7 +42410,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -41987,7 +42427,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42122,7 +42562,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42151,8 +42591,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42169,7 +42609,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42178,7 +42618,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42324,12 +42764,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42393,7 +42833,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42410,261 +42850,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44570,6 +45009,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49938,7 +52179,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -49983,9 +52224,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50016,17 +52258,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50044,6 +52287,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52603,7 +54898,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52662,15 +54957,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52801,7 +55092,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52875,19 +55166,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52899,15 +55190,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52944,8 +55235,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53025,7 +55316,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53369,7 +55660,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/sl.po b/weblate/sl.po index 3e70d48943..8c04cd2ef1 100644 --- a/weblate/sl.po +++ b/weblate/sl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-26 13:44+0000\n" "Last-Translator: matevž lapajne \n" "Language-Team: Slovenian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3421,109 +3432,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3531,55 +3542,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3587,57 +3598,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3647,17 +3658,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3665,7 +3676,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3673,55 +3684,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3729,17 +3740,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4087,7 +4098,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4096,24 +4107,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4122,11 +4133,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4134,7 +4145,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4143,7 +4154,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4151,18 +4162,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4170,7 +4181,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4178,7 +4189,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4186,28 +4197,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4216,32 +4227,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4249,17 +4261,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4267,7 +4279,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4276,11 +4288,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4288,36 +4300,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8844,9 +8856,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12249,8 +12261,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12368,7 +12380,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13423,7 +13435,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13615,28 +13627,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13727,59 +13739,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Godot nima omejitve uporabe" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13839,6 +13798,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13858,6 +13824,222 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Godot nima omejitve uporabe" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animacija" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animacija" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animacija" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14297,7 +14479,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19269,7 +19451,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19312,7 +19494,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19337,10 +19519,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19419,7 +19601,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19510,7 +19692,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19630,18 +19812,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19649,108 +19831,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19759,261 +19941,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20022,22 +20205,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20045,24 +20228,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20070,11 +20253,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20082,11 +20265,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20094,11 +20277,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20107,7 +20290,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20115,22 +20298,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20138,11 +20321,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20152,79 +20335,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Globina" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20232,17 +20415,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20251,17 +20434,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20404,7 +20587,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21697,7 +21880,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21805,7 +21988,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23068,303 +23251,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23376,6 +23691,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23522,6 +23838,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23536,6 +23853,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23571,14 +23889,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23857,7 +24178,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23996,8 +24317,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24378,11 +24699,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24412,11 +24734,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24526,9 +24849,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24614,7 +24937,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24622,7 +24945,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24658,8 +24981,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24689,7 +25012,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24725,7 +25049,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24802,7 +25126,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24828,10 +25152,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24854,8 +25178,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24901,7 +25225,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24929,9 +25253,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24946,15 +25270,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24967,7 +25291,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25004,7 +25328,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25025,7 +25349,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25068,9 +25392,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25108,92 +25432,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25203,37 +25527,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25243,32 +25567,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25277,19 +25601,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25297,26 +25621,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25324,7 +25648,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25333,7 +25657,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25342,20 +25666,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25364,66 +25688,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25433,31 +25757,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25467,51 +25791,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25519,23 +25843,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25543,45 +25867,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25589,7 +25913,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25599,51 +25923,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25651,13 +25975,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25665,65 +25989,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25731,7 +26055,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25739,84 +26063,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25825,24 +26149,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25850,56 +26174,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25907,14 +26231,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25922,7 +26246,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25932,49 +26256,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25983,7 +26303,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25992,19 +26312,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26013,47 +26333,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26061,53 +26381,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26117,11 +26437,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26134,57 +26454,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26371,7 +26691,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26384,7 +26704,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26436,8 +26756,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26620,8 +26940,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26766,7 +27085,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26932,7 +27251,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26945,7 +27264,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26960,7 +27279,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26970,8 +27289,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26984,7 +27303,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27069,7 +27388,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27133,30 +27452,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27164,108 +27483,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27273,49 +27592,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27323,27 +27642,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27353,7 +27672,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27362,14 +27681,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27378,32 +27697,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27411,7 +27730,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27421,54 +27740,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27476,38 +27795,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27515,29 +27834,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27546,29 +27865,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27577,13 +27896,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27591,18 +27910,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27610,38 +27929,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27649,38 +27968,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27689,32 +28008,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27722,7 +28041,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27730,13 +28049,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27744,20 +28063,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27766,20 +28085,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27788,70 +28107,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27861,11 +28181,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27873,39 +28193,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27914,67 +28234,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27984,34 +28304,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28019,20 +28339,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29043,6 +29363,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30798,15 +31119,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33637,12 +33975,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animacija" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35614,8 +35946,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35822,9 +36154,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39521,11 +39853,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39553,7 +39885,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39594,10 +39926,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39654,7 +39986,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39721,7 +40053,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39730,7 +40062,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39741,7 +40073,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39749,7 +40081,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39757,43 +40089,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39802,17 +40134,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39822,7 +40154,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39833,7 +40165,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39845,30 +40177,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39879,7 +40217,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39887,89 +40225,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40028,7 +40474,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40764,10 +41210,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41588,7 +42030,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41813,7 +42255,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41879,9 +42321,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41959,7 +42401,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42102,7 +42544,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42146,7 +42588,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42163,7 +42605,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42298,7 +42740,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42327,8 +42769,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42345,7 +42787,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42354,7 +42796,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42500,12 +42942,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42569,7 +43011,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42586,261 +43028,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44746,6 +45187,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Godot nima omejitve uporabe" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Vtičniki" @@ -50114,7 +52358,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50159,9 +52403,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50192,17 +52437,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50220,6 +52466,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52779,7 +55077,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52839,15 +55137,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52979,7 +55273,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53053,19 +55347,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53077,15 +55371,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53122,8 +55416,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53205,7 +55499,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53548,10 +55842,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Poleg te dokumentacije si boste morda tudi želeli pogledati različne `Godot " +"demo projekti `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/sr_Latn.po b/weblate/sr_Latn.po index ac78599cd9..6f97481910 100644 --- a/weblate/sr_Latn.po +++ b/weblate/sr_Latn.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-05-15 08:41+0000\n" "Last-Translator: Milos Ponjavusic \n" "Language-Team: Serbian (latin) ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3352,109 +3363,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3462,55 +3473,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3518,57 +3529,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3578,17 +3589,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3596,7 +3607,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3604,55 +3615,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3660,17 +3671,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4017,7 +4028,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4026,24 +4037,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4052,11 +4063,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4064,7 +4075,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4073,7 +4084,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4081,18 +4092,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4100,7 +4111,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4108,7 +4119,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4116,28 +4127,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4146,32 +4157,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4179,17 +4191,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4197,7 +4209,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4206,11 +4218,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4218,36 +4230,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8774,9 +8786,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12179,8 +12191,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12298,7 +12310,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13353,7 +13365,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13545,28 +13557,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13657,59 +13669,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Ne postoje ograničenja prilikom korištenja Godot-a" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13769,6 +13728,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13788,6 +13754,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Ne postoje ograničenja prilikom korištenja Godot-a" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14227,7 +14407,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19199,7 +19379,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19242,7 +19422,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19267,10 +19447,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19349,7 +19529,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19440,7 +19620,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19560,18 +19740,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19579,108 +19759,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19689,261 +19869,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19952,22 +20133,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19975,24 +20156,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20000,11 +20181,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20012,11 +20193,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20024,11 +20205,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20037,7 +20218,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20045,22 +20226,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20068,11 +20249,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20082,79 +20263,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20162,17 +20343,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20181,17 +20362,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20334,7 +20515,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21627,7 +21808,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21735,7 +21916,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22998,303 +23179,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23306,6 +23619,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23452,6 +23766,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23466,6 +23781,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23501,14 +23817,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23787,7 +24106,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23926,8 +24245,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24308,11 +24627,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24342,11 +24662,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24456,9 +24777,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24544,7 +24865,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24552,7 +24873,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24588,8 +24909,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24619,7 +24940,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24655,7 +24977,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24732,7 +25054,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24758,10 +25080,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24784,8 +25106,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24831,7 +25153,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24859,9 +25181,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24876,15 +25198,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24897,7 +25219,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24934,7 +25256,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24955,7 +25277,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24998,9 +25320,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25038,92 +25360,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25133,37 +25455,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25173,32 +25495,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25207,19 +25529,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25227,26 +25549,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25254,7 +25576,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25263,7 +25585,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25272,20 +25594,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25294,66 +25616,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25363,31 +25685,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25397,51 +25719,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25449,23 +25771,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25473,45 +25795,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25519,7 +25841,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25529,51 +25851,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25581,13 +25903,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25595,65 +25917,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25661,7 +25983,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25669,84 +25991,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25755,24 +26077,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25780,56 +26102,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25837,14 +26159,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25852,7 +26174,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25862,49 +26184,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25913,7 +26231,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25922,19 +26240,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25943,47 +26261,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25991,53 +26309,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26047,11 +26365,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26064,57 +26382,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26301,7 +26619,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26314,7 +26632,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26366,8 +26684,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26550,8 +26868,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26696,7 +27013,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26862,7 +27179,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26875,7 +27192,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26890,7 +27207,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26900,8 +27217,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26914,7 +27231,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26999,7 +27316,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27063,30 +27380,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27094,108 +27411,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27203,49 +27520,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27253,27 +27570,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27283,7 +27600,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27292,14 +27609,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27308,32 +27625,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27341,7 +27658,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27351,54 +27668,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27406,38 +27723,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27445,29 +27762,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27476,29 +27793,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27507,13 +27824,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27521,18 +27838,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27540,38 +27857,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27579,38 +27896,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27619,32 +27936,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27652,7 +27969,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27660,13 +27977,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27674,20 +27991,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27696,20 +28013,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27718,70 +28035,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27791,11 +28109,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27803,39 +28121,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27844,67 +28162,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27914,34 +28232,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27949,20 +28267,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28973,6 +29291,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30728,15 +31047,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33567,12 +33903,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35544,8 +35874,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35752,9 +36082,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39451,11 +39781,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39483,7 +39813,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39524,10 +39854,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39584,7 +39914,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39651,7 +39981,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39660,7 +39990,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39671,7 +40001,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39679,7 +40009,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39687,43 +40017,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39732,17 +40062,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39752,7 +40082,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39763,7 +40093,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39775,30 +40105,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39809,7 +40145,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39817,89 +40153,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39958,7 +40402,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40694,10 +41138,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41518,7 +41958,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41743,7 +42183,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41809,9 +42249,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41889,7 +42329,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42032,7 +42472,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42076,7 +42516,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42093,7 +42533,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42228,7 +42668,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42257,8 +42697,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42275,7 +42715,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42284,7 +42724,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42430,12 +42870,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42499,7 +42939,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42516,261 +42956,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44676,6 +45115,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Ne postoje ograničenja prilikom korištenja Godot-a" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50044,7 +52286,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50089,9 +52331,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50122,17 +52365,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50150,6 +52394,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52709,7 +55005,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52768,15 +55064,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52907,7 +55199,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52981,19 +55273,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53005,15 +55297,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53050,8 +55342,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53131,7 +55423,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53474,10 +55766,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Uz ovu dokumentaciju takođe možete pogledati raznorazne `Godot demo projects " +"`_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/sv.po b/weblate/sv.po index 156c348d90..abbcbf9230 100644 --- a/weblate/sv.po +++ b/weblate/sv.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-06-12 18:44+0000\n" "Last-Translator: Tobias Björkdahl \n" "Language-Team: Swedish ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3263,109 +3274,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3373,55 +3384,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3429,57 +3440,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3489,17 +3500,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3507,7 +3518,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3515,55 +3526,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3571,17 +3582,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3928,7 +3939,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3937,24 +3948,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -3963,11 +3974,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -3975,7 +3986,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -3984,7 +3995,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -3992,18 +4003,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4011,7 +4022,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4019,7 +4030,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4027,28 +4038,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4057,32 +4068,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Resurser:" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4090,17 +4103,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4108,7 +4121,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4117,11 +4130,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4129,36 +4142,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8685,9 +8698,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12089,8 +12102,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12208,7 +12221,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13263,7 +13276,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13455,28 +13468,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13567,58 +13580,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13679,6 +13640,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13698,6 +13666,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14137,7 +14318,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19109,7 +19290,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19152,7 +19333,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19177,10 +19358,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19259,7 +19440,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19350,7 +19531,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19470,18 +19651,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19489,108 +19670,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19599,261 +19780,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19862,22 +20044,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19885,24 +20067,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19910,11 +20092,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19922,11 +20104,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19934,11 +20116,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19947,7 +20129,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -19955,22 +20137,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -19978,11 +20160,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -19992,79 +20174,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20072,17 +20254,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20091,17 +20273,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20244,7 +20426,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21537,7 +21719,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21645,7 +21827,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22908,303 +23090,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23216,6 +23530,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23362,6 +23677,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23376,6 +23692,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23411,14 +23728,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23697,7 +24017,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23836,8 +24156,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24218,11 +24538,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24252,11 +24573,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24366,9 +24688,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24454,7 +24776,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24462,7 +24784,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24498,8 +24820,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24529,7 +24851,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24565,7 +24888,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24642,7 +24965,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24668,10 +24991,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24694,8 +25017,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24741,7 +25064,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24769,9 +25092,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24786,15 +25109,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24807,7 +25130,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24844,7 +25167,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24865,7 +25188,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24908,9 +25231,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24948,92 +25271,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25043,37 +25366,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25083,32 +25406,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25117,19 +25440,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25137,26 +25460,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25164,7 +25487,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25173,7 +25496,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25182,20 +25505,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25204,66 +25527,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25273,31 +25596,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25307,51 +25630,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25359,23 +25682,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25383,45 +25706,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25429,7 +25752,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25439,51 +25762,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25491,13 +25814,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25505,65 +25828,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25571,7 +25894,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25579,84 +25902,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25665,24 +25988,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25690,56 +26013,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25747,14 +26070,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25762,7 +26085,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25772,49 +26095,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25823,7 +26142,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25832,19 +26151,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25853,47 +26172,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25901,53 +26220,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -25957,11 +26276,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -25974,57 +26293,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26211,7 +26530,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26224,7 +26543,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26276,8 +26595,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26460,8 +26779,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26606,7 +26924,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26772,7 +27090,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26785,7 +27103,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26800,7 +27118,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26810,8 +27128,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26824,7 +27142,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26909,7 +27227,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -26973,30 +27291,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27004,108 +27322,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27113,49 +27431,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27163,27 +27481,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27193,7 +27511,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27202,14 +27520,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27218,32 +27536,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27251,7 +27569,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27261,54 +27579,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27316,38 +27634,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27355,29 +27673,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27386,29 +27704,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27417,13 +27735,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27431,18 +27749,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27450,38 +27768,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27489,38 +27807,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27529,32 +27847,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27562,7 +27880,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27570,13 +27888,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27584,20 +27902,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27606,20 +27924,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27628,70 +27946,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27701,11 +28020,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27713,39 +28032,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27754,67 +28073,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27824,34 +28143,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27859,20 +28178,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28883,6 +29202,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30638,15 +30958,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33477,12 +33814,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35454,8 +35785,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35662,9 +35993,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39361,11 +39692,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39393,7 +39724,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39434,10 +39765,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39494,7 +39825,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39561,7 +39892,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39570,7 +39901,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39581,7 +39912,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39589,7 +39920,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39597,43 +39928,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39642,17 +39973,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39662,7 +39993,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39673,7 +40004,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39685,30 +40016,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39719,7 +40056,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39727,89 +40064,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39868,7 +40313,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40604,10 +41049,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41428,7 +41869,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41653,7 +42094,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41719,9 +42160,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41799,7 +42240,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41942,7 +42383,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -41986,7 +42427,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42003,7 +42444,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42138,7 +42579,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42167,8 +42608,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42185,7 +42626,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42194,7 +42635,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42340,12 +42781,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42409,7 +42850,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42426,261 +42867,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44586,6 +45026,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -49954,7 +52196,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -49999,9 +52241,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50032,17 +52275,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50060,6 +52304,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52619,7 +54915,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52678,15 +54974,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52817,7 +55109,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52891,19 +55183,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52915,15 +55207,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -52960,8 +55252,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53041,7 +55333,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53385,7 +55677,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/th.po b/weblate/th.po index def2a8942c..0ec82a77d5 100644 --- a/weblate/th.po +++ b/weblate/th.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-04-17 12:41+0000\n" "Last-Translator: Poommetee Ketson \n" "Language-Team: Thai ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3419,109 +3430,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3529,55 +3540,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3585,57 +3596,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3645,17 +3656,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3663,7 +3674,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3671,55 +3682,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3727,17 +3738,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4084,7 +4095,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4093,24 +4104,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4119,11 +4130,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4131,7 +4142,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4140,7 +4151,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4148,18 +4159,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4167,7 +4178,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4175,7 +4186,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4183,28 +4194,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4213,32 +4224,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4246,17 +4258,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4264,7 +4276,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4273,11 +4285,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4285,36 +4297,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8842,9 +8854,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12302,8 +12314,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12421,7 +12433,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13477,7 +13489,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13669,28 +13681,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13781,59 +13793,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "ไม่มีข้อจำกัดการใช้งาน Godot" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13893,6 +13852,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13912,6 +13878,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "ไม่มีข้อจำกัดการใช้งาน Godot" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14351,7 +14531,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19329,7 +19509,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19372,7 +19552,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19397,10 +19577,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19479,7 +19659,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19570,7 +19750,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19690,18 +19870,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19709,108 +19889,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19819,261 +19999,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20082,22 +20263,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20105,24 +20286,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20130,11 +20311,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20142,11 +20323,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20154,11 +20335,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20167,7 +20348,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20175,22 +20356,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20198,11 +20379,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20212,79 +20393,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20292,17 +20473,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20311,17 +20492,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20464,7 +20645,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21757,7 +21938,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21865,7 +22046,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23128,303 +23309,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23436,6 +23749,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23582,6 +23896,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23596,6 +23911,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23631,14 +23947,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23917,7 +24236,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24056,8 +24375,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24438,11 +24757,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24472,11 +24792,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24586,9 +24907,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24674,7 +24995,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24682,7 +25003,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24718,8 +25039,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24749,7 +25070,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24785,7 +25107,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24862,7 +25184,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24888,10 +25210,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24914,8 +25236,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24961,7 +25283,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24989,9 +25311,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -25006,15 +25328,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -25027,7 +25349,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25064,7 +25386,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25085,7 +25407,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25128,9 +25450,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25168,92 +25490,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25263,37 +25585,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25303,32 +25625,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25337,19 +25659,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25357,26 +25679,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25384,7 +25706,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25393,7 +25715,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25402,20 +25724,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25424,66 +25746,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25493,31 +25815,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25527,51 +25849,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25579,23 +25901,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25603,45 +25925,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25649,7 +25971,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25659,51 +25981,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25711,13 +26033,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25725,65 +26047,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25791,7 +26113,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25799,84 +26121,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25885,24 +26207,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25910,56 +26232,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25967,14 +26289,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25982,7 +26304,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25992,49 +26314,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26043,7 +26361,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26052,19 +26370,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26073,47 +26391,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26121,53 +26439,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26177,11 +26495,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26194,57 +26512,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26431,7 +26749,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26444,7 +26762,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26496,8 +26814,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26680,8 +26998,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26826,7 +27143,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26992,7 +27309,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -27005,7 +27322,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -27020,7 +27337,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -27030,8 +27347,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27044,7 +27361,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27129,7 +27446,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27193,30 +27510,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27224,108 +27541,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27333,49 +27650,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27383,27 +27700,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27413,7 +27730,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27422,14 +27739,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27438,32 +27755,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27471,7 +27788,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27481,54 +27798,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27536,38 +27853,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27575,29 +27892,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27606,29 +27923,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27637,13 +27954,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27651,18 +27968,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27670,38 +27987,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27709,38 +28026,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27749,32 +28066,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27782,7 +28099,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27790,13 +28107,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27804,20 +28121,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27826,20 +28143,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27848,70 +28165,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27921,11 +28239,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27933,39 +28251,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27974,67 +28292,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28044,34 +28362,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28079,20 +28397,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29103,6 +29421,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30858,15 +31177,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33697,12 +34033,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35674,8 +36004,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35882,9 +36212,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39581,11 +39911,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39613,7 +39943,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39654,10 +39984,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39714,7 +40044,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39781,7 +40111,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39790,7 +40120,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39801,7 +40131,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39809,7 +40139,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39817,43 +40147,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39862,17 +40192,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39882,7 +40212,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39893,7 +40223,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39905,30 +40235,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39939,7 +40275,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39947,89 +40283,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40088,7 +40532,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40824,10 +41268,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41648,7 +42088,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41873,7 +42313,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41939,9 +42379,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -42019,7 +42459,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42162,7 +42602,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42206,7 +42646,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42223,7 +42663,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42358,7 +42798,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42387,8 +42827,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42405,7 +42845,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42414,7 +42854,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42560,12 +43000,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42629,7 +43069,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42646,261 +43086,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44806,6 +45245,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "ไม่มีข้อจำกัดการใช้งาน Godot" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50174,7 +52416,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50219,9 +52461,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50252,17 +52495,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50280,6 +52524,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "เงื่อนไข" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52843,7 +55140,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52903,15 +55200,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -53042,7 +55335,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53116,19 +55409,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53140,15 +55433,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53185,8 +55478,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53267,7 +55560,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53610,10 +55903,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"นอกจากนี้ท่านอาจสนใจเกี่ยวกับ `ตัวอย่างโปรเจกต์ `_" #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/tr.po b/weblate/tr.po index bbfbe2408b..432c46ba7a 100644 --- a/weblate/tr.po +++ b/weblate/tr.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-07 20:42+0000\n" "Last-Translator: Onur Sanır \n" "Language-Team: Turkish ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3311,109 +3322,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3421,55 +3432,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3477,57 +3488,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3537,17 +3548,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3555,7 +3566,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3563,55 +3574,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Parçacıklar" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3619,17 +3630,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3977,7 +3988,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3986,24 +3997,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4012,11 +4023,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4024,7 +4035,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4033,7 +4044,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4041,18 +4052,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4060,7 +4071,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4068,7 +4079,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4076,28 +4087,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4106,32 +4117,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "Kaynaklar" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4139,17 +4152,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4157,7 +4170,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4166,11 +4179,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4178,36 +4191,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8734,9 +8747,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12141,8 +12154,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12260,7 +12273,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13315,7 +13328,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13507,28 +13520,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13619,58 +13632,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "Not etmeniz gereken bazı şeyler:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13730,6 +13691,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13749,6 +13717,221 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "Not etmeniz gereken bazı şeyler:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Animasyon" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Animasyon" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "Animasyon" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14188,7 +14371,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19160,7 +19343,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19203,7 +19386,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19228,10 +19411,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19310,7 +19493,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19401,7 +19584,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19521,18 +19704,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19540,108 +19723,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19650,261 +19833,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19913,22 +20097,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19936,24 +20120,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19961,11 +20145,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19973,11 +20157,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19985,11 +20169,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -19998,7 +20182,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20006,22 +20190,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20029,11 +20213,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20043,79 +20227,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Derinlik" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20123,17 +20307,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20142,17 +20326,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20295,7 +20479,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21588,7 +21772,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21696,7 +21880,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22959,303 +23143,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23267,6 +23583,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23413,6 +23730,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23427,6 +23745,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23462,14 +23781,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23748,7 +24070,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23887,8 +24209,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24269,11 +24591,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24303,11 +24626,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24417,9 +24741,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24505,7 +24829,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24513,7 +24837,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24549,8 +24873,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24580,7 +24904,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24616,7 +24941,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24693,7 +25018,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24719,10 +25044,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24745,8 +25070,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24792,7 +25117,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24820,9 +25145,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24837,15 +25162,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24858,7 +25183,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24895,7 +25220,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24916,7 +25241,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24959,9 +25284,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -24999,92 +25324,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25094,37 +25419,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25134,32 +25459,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25168,19 +25493,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25188,26 +25513,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25215,7 +25540,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25224,7 +25549,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25233,20 +25558,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25255,66 +25580,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25324,31 +25649,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25358,51 +25683,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25410,23 +25735,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25434,45 +25759,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25480,7 +25805,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25490,51 +25815,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25542,13 +25867,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25556,65 +25881,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25622,7 +25947,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25630,84 +25955,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25716,24 +26041,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25741,56 +26066,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25798,14 +26123,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25813,7 +26138,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25823,49 +26148,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25874,7 +26195,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25883,19 +26204,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25904,47 +26225,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25952,53 +26273,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26008,11 +26329,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26025,57 +26346,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26262,7 +26583,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26275,7 +26596,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26327,8 +26648,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26511,8 +26832,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26657,7 +26977,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26823,7 +27143,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26836,7 +27156,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26851,7 +27171,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26861,8 +27181,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26875,7 +27195,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26960,7 +27280,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27024,30 +27344,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27055,108 +27375,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27164,49 +27484,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27214,27 +27534,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27244,7 +27564,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27253,14 +27573,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27269,32 +27589,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27302,7 +27622,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27312,54 +27632,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27367,38 +27687,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27406,29 +27726,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27437,29 +27757,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27468,13 +27788,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27482,18 +27802,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27501,38 +27821,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27540,38 +27860,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27580,32 +27900,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27613,7 +27933,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27621,13 +27941,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27635,20 +27955,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27657,20 +27977,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27679,70 +27999,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27752,11 +28073,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27764,39 +28085,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27805,67 +28126,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27875,34 +28196,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27910,20 +28231,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28934,6 +29255,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30689,15 +31011,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33528,12 +33867,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Animasyon" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35505,8 +35838,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35713,9 +36046,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39412,11 +39745,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39444,7 +39777,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39485,10 +39818,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39545,7 +39878,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39612,7 +39945,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39621,7 +39954,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39632,7 +39965,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39640,7 +39973,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39648,43 +39981,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39693,17 +40026,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39713,7 +40046,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39724,7 +40057,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39736,30 +40069,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39770,7 +40109,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39778,89 +40117,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39919,7 +40366,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40655,10 +41102,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41479,7 +41922,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41704,7 +42147,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41770,9 +42213,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41850,7 +42293,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -41993,7 +42436,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42037,7 +42480,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42054,7 +42497,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42189,7 +42632,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42218,8 +42661,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42236,7 +42679,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42245,7 +42688,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42391,12 +42834,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42460,7 +42903,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42477,261 +42920,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44637,6 +45079,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Not etmeniz gereken bazı şeyler:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Eklentiler" @@ -50005,7 +52250,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50050,9 +52295,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50083,17 +52329,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50111,6 +52358,59 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Koşul" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52671,7 +54971,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52730,15 +55030,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52870,7 +55166,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52944,19 +55240,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52968,15 +55264,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53013,8 +55309,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53094,7 +55390,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53438,7 +55734,7 @@ msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" diff --git a/weblate/uk.po b/weblate/uk.po index a9fcb22378..d37d6002b3 100644 --- a/weblate/uk.po +++ b/weblate/uk.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-03 10:43+0000\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3526,109 +3537,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3636,55 +3647,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3692,57 +3703,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "Завершальна обробка" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "Тло" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3752,17 +3763,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "Звукові ефекти" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3770,7 +3781,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3778,55 +3789,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "Частинки" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3834,17 +3845,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "Файли проекту" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4191,7 +4202,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4200,24 +4211,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4226,11 +4237,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4238,7 +4249,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4247,7 +4258,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4255,18 +4266,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4274,7 +4285,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4282,7 +4293,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4290,28 +4301,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4320,32 +4331,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" msgstr "Відкритий код" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4353,17 +4366,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4371,7 +4384,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4380,11 +4393,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4392,36 +4405,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8948,9 +8961,9 @@ msgstr "Ключове слово" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12355,8 +12368,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12474,7 +12487,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13529,7 +13542,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13721,28 +13734,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "Інтеграція конвеєра збирання" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13833,58 +13846,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "Освітлення" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "Тут слід зазначити таке:" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "Фізичні властивості" @@ -13944,6 +13905,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13963,6 +13931,225 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "Освітлення" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "Тут слід зазначити таке:" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "ArrayMesh" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#, fuzzy +msgid "Modifiers" +msgstr "Ідентифікатори" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +#, fuzzy +msgid "Bone Attachment" +msgstr "BoneAttachment" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "Анімація" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "Дублювати анімацію" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +#, fuzzy +msgid "Action Lib" +msgstr "Дія" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "AnimationPlayer" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14402,7 +14589,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19375,7 +19562,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19418,7 +19605,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "Обробка" @@ -19443,10 +19630,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19525,7 +19712,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19616,7 +19803,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19736,18 +19923,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19755,108 +19942,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19865,261 +20052,262 @@ msgstr "" msgid "Parameters" msgstr "Параметри" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "Режим змішування" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "Товщина лінії" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "Розмір крапки" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "Збільшити" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "Альбедо" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -20128,22 +20316,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20151,24 +20339,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20176,11 +20364,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20188,11 +20376,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20200,11 +20388,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20213,7 +20401,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20221,22 +20409,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "Анізотропія" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20244,11 +20432,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20258,79 +20446,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "Глибина" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "Подробиці" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20338,17 +20526,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20357,17 +20545,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20510,7 +20698,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21803,7 +21991,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21911,7 +22099,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23174,303 +23362,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23482,6 +23802,7 @@ msgid "Part 1" msgstr "Частина 1" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23628,6 +23949,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23642,6 +23964,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23677,14 +24000,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "Готуємо усе" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23963,7 +24289,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -24102,8 +24428,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24484,11 +24810,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24518,11 +24845,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24632,9 +24960,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24720,7 +25048,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24728,7 +25056,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24764,8 +25092,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24795,7 +25123,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24831,7 +25160,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24908,7 +25237,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24934,10 +25263,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24960,8 +25289,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -25007,7 +25336,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -25035,9 +25364,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -25052,15 +25381,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -25073,7 +25402,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -25110,7 +25439,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -25131,7 +25460,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25174,9 +25503,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25214,92 +25543,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25309,37 +25638,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25349,32 +25678,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25383,19 +25712,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25403,26 +25732,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25430,7 +25759,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25439,7 +25768,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25448,20 +25777,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25470,66 +25799,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25539,31 +25868,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25573,51 +25902,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25625,23 +25954,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25649,45 +25978,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25695,7 +26024,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25705,51 +26034,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25757,13 +26086,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25771,65 +26100,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25837,7 +26166,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25845,84 +26174,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25931,24 +26260,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25956,56 +26285,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -26013,14 +26342,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -26028,7 +26357,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -26038,49 +26367,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -26089,7 +26414,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -26098,19 +26423,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -26119,47 +26444,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26167,53 +26492,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26223,11 +26548,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26240,57 +26565,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26477,7 +26802,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26490,7 +26815,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26542,8 +26867,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26726,8 +27051,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26872,7 +27196,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -27038,7 +27362,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -27051,7 +27375,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -27066,7 +27390,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -27076,8 +27400,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -27090,7 +27414,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27175,7 +27499,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27239,30 +27563,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27270,108 +27594,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27379,49 +27703,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27429,27 +27753,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27459,7 +27783,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27468,14 +27792,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27484,32 +27808,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27517,7 +27841,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27527,54 +27851,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27582,38 +27906,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27621,29 +27945,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27652,29 +27976,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27683,13 +28007,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27697,18 +28021,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27716,38 +28040,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27755,38 +28079,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27795,32 +28119,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27828,7 +28152,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27836,13 +28160,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27850,20 +28174,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27872,20 +28196,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27894,70 +28218,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27967,11 +28292,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27979,39 +28304,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -28020,67 +28345,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -28090,34 +28415,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -28125,20 +28450,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29149,6 +29474,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30904,15 +31230,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33743,12 +34086,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "Анімація" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35720,8 +36057,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35928,9 +36265,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39629,11 +39966,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39661,7 +39998,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39702,10 +40039,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39762,7 +40099,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39829,7 +40166,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39838,7 +40175,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39849,7 +40186,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39857,7 +40194,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39865,43 +40202,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39910,17 +40247,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39930,7 +40267,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39941,7 +40278,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39953,30 +40290,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "Зміна розміру %1" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39987,7 +40330,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39995,89 +40338,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -40136,7 +40587,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40872,10 +41323,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41696,7 +42143,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41921,7 +42368,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41987,9 +42434,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -42067,7 +42514,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42210,7 +42657,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42254,7 +42701,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42271,7 +42718,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42406,7 +42853,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42435,8 +42882,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42453,7 +42900,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42462,7 +42909,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42608,12 +43055,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42677,7 +43124,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42694,261 +43141,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44854,6 +45300,1815 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "Як розпочати гру" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "Додавання освітлення" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Тут слід зазначити таке:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "Додавання освітлення" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "Додавання ШІ" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "Додавання ШІ" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "Як розпочати гру" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "Плаґіни" @@ -50227,7 +52482,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50272,9 +52527,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50305,17 +52561,18 @@ msgstr "Нотатки" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50333,6 +52590,60 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "Командний рядок" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +#, fuzzy +msgid "default: yes" +msgstr "Типові можливості" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "Пакування Godot" @@ -52930,7 +55241,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52989,15 +55300,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -53128,7 +55435,7 @@ msgstr "ідентифікатора" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53202,19 +55509,20 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" -msgstr "" +#, fuzzy +msgid "Tangents array" +msgstr "Дотична" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53226,15 +55534,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53271,8 +55579,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53352,7 +55660,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53695,10 +56003,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Окрім цієї документації, ви також можете поглянути на різні `демонстраційні " +"проекти \"Godot\" `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" @@ -56127,9 +58438,6 @@ msgid "" "`_" msgstr "" -#~ msgid "Adding AI" -#~ msgstr "Додавання ШІ" - #~ msgid "What" #~ msgstr "Що" diff --git a/weblate/vi.po b/weblate/vi.po index d361410f69..344994ac0e 100644 --- a/weblate/vi.po +++ b/weblate/vi.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-05-17 02:42+0000\n" "Last-Translator: mth2610 \n" "Language-Team: Vietnamese ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3322,109 +3333,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3432,55 +3443,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3488,57 +3499,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3548,17 +3559,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3566,7 +3577,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3574,55 +3585,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3630,17 +3641,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -3987,7 +3998,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -3996,24 +4007,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4022,11 +4033,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4034,7 +4045,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4043,7 +4054,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4051,18 +4062,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4070,7 +4081,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4078,7 +4089,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4086,28 +4097,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4116,32 +4127,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4149,17 +4161,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4167,7 +4179,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4176,11 +4188,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4188,36 +4200,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8744,9 +8756,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12148,8 +12160,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12267,7 +12279,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13322,7 +13334,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13514,28 +13526,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13626,58 +13638,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -msgid "There are some things to note:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13737,6 +13697,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13756,6 +13723,219 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +msgid "There are some things to note:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14195,7 +14375,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19167,7 +19347,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19210,7 +19390,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19235,10 +19415,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19317,7 +19497,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19408,7 +19588,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19528,18 +19708,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19547,108 +19727,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19657,261 +19837,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19920,22 +20101,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -19943,24 +20124,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -19968,11 +20149,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -19980,11 +20161,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -19992,11 +20173,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20005,7 +20186,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20013,22 +20194,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20036,11 +20217,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20050,79 +20231,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20130,17 +20311,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20149,17 +20330,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20302,7 +20483,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21595,7 +21776,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21703,7 +21884,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -22966,303 +23147,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23274,6 +23587,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23420,6 +23734,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23434,6 +23749,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23469,14 +23785,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23755,7 +24074,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23894,8 +24213,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24276,11 +24595,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24310,11 +24630,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24424,9 +24745,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24512,7 +24833,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24520,7 +24841,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24556,8 +24877,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24587,7 +24908,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24623,7 +24945,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24700,7 +25022,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24726,10 +25048,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24752,8 +25074,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24799,7 +25121,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24827,9 +25149,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24844,15 +25166,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24865,7 +25187,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24902,7 +25224,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24923,7 +25245,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -24966,9 +25288,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25006,92 +25328,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25101,37 +25423,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25141,32 +25463,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25175,19 +25497,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25195,26 +25517,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25222,7 +25544,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25231,7 +25553,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25240,20 +25562,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25262,66 +25584,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25331,31 +25653,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25365,51 +25687,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25417,23 +25739,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25441,45 +25763,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25487,7 +25809,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25497,51 +25819,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25549,13 +25871,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25563,65 +25885,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25629,7 +25951,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25637,84 +25959,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25723,24 +26045,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25748,56 +26070,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25805,14 +26127,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25820,7 +26142,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25830,49 +26152,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25881,7 +26199,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25890,19 +26208,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25911,47 +26229,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -25959,53 +26277,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26015,11 +26333,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26032,57 +26350,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26269,7 +26587,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26282,7 +26600,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26334,8 +26652,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26518,8 +26836,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26664,7 +26981,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26830,7 +27147,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26843,7 +27160,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26858,7 +27175,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26868,8 +27185,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26882,7 +27199,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -26967,7 +27284,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27031,30 +27348,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27062,108 +27379,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27171,49 +27488,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27221,27 +27538,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27251,7 +27568,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27260,14 +27577,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27276,32 +27593,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27309,7 +27626,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27319,54 +27636,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27374,38 +27691,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27413,29 +27730,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27444,29 +27761,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27475,13 +27792,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27489,18 +27806,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27508,38 +27825,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27547,38 +27864,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27587,32 +27904,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27620,7 +27937,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27628,13 +27945,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27642,20 +27959,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27664,20 +27981,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27686,70 +28003,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27759,11 +28077,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27771,39 +28089,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27812,67 +28130,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27882,34 +28200,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27917,20 +28235,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -28941,6 +29259,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30696,15 +31015,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33535,12 +33871,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35512,8 +35842,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35720,9 +36050,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39419,11 +39749,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39451,7 +39781,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39492,10 +39822,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39552,7 +39882,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39619,7 +39949,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39628,7 +39958,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39639,7 +39969,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39647,7 +39977,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39655,43 +39985,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39700,17 +40030,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39720,7 +40050,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39731,7 +40061,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39743,30 +40073,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39777,7 +40113,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39785,89 +40121,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39926,7 +40370,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40662,10 +41106,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41486,7 +41926,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41711,7 +42151,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41777,9 +42217,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41857,7 +42297,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42000,7 +42440,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42044,7 +42484,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42061,7 +42501,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42196,7 +42636,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42225,8 +42665,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42243,7 +42683,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42252,7 +42692,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42398,12 +42838,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42467,7 +42907,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42484,261 +42924,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44644,6 +45083,1808 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +msgid "There is a few things to note here." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50012,7 +52253,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50057,9 +52298,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50090,17 +52332,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50118,6 +52361,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52677,7 +54972,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52736,15 +55031,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52875,7 +55166,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -52949,19 +55240,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -52973,15 +55264,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53018,8 +55309,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53099,7 +55390,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53442,10 +55733,14 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"Ngoài bộ tài liệu này, bạn cũng có thể xem thử các dự án demo có sẵn của " +"Godot `Godot demo projects `_." #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" diff --git a/weblate/zh_CN.po b/weblate/zh_CN.po index cb4c5a101e..ddf3c5ce33 100644 --- a/weblate/zh_CN.po +++ b/weblate/zh_CN.po @@ -32,7 +32,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-18 12:48+0000\n" "Last-Translator: MrNewWorld \n" "Language-Team: Chinese (Simplified) ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "HUD显示以下信息:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "分数,用``ScoreTimer``改变。" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "一条信息,如”Game Over“或”Get Ready!“" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "一个”Start“按钮来开始游戏。" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" @@ -3863,27 +3875,27 @@ msgstr "" "`Control `的两种节点: :ref:`Label `和:ref:" "`Button `。" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "创造以下节点作为``HUD``的子节点:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr ":ref:`Label `命名为 ``ScoreLabel``。" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr ":ref:`Label `命名为``MessageLabel``。" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr ":ref:`Button `命名为``StartButton``。" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3893,109 +3905,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -4003,55 +4015,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "现在增加该脚本到``HUD``:" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -4059,57 +4071,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -4119,17 +4131,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -4137,7 +4149,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -4145,55 +4157,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "粒子" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -4201,17 +4213,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4562,7 +4574,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4571,24 +4583,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4597,11 +4609,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4609,7 +4621,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4618,7 +4630,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4626,18 +4638,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4645,7 +4657,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4653,7 +4665,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4661,28 +4673,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4691,32 +4703,34 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" -msgstr "" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#, fuzzy +msgid "Open source" +msgstr "资源" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4724,17 +4738,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4742,7 +4756,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4751,11 +4765,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4763,36 +4777,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -9498,9 +9512,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12968,8 +12982,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -13087,7 +13101,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -14146,7 +14160,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -14352,29 +14366,29 @@ msgstr "Godot 场景导入器" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 #, fuzzy msgid "Build Pipeline Integration" msgstr "构建配置:" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -14466,59 +14480,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "灯光" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Godot没有任何使用限制" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -14580,6 +14541,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -14599,6 +14567,223 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "灯光" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Godot没有任何使用限制" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#, fuzzy +msgid "Mesh" +msgstr "网格" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "动画" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#, fuzzy +msgid "Supported Animation" +msgstr "精灵动画" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +#, fuzzy +msgid "Placing of AnimationPlayer" +msgstr "动画" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "资产工作流" @@ -15098,8 +15283,9 @@ msgid "Process" msgstr "过程" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 +#, fuzzy msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "当作为纹理导入时, 某些特殊过程可以应用于图像。" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -20411,7 +20597,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -20454,7 +20640,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -20479,10 +20665,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -20561,7 +20747,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -20652,7 +20838,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -20772,18 +20958,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -20791,108 +20977,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -20901,261 +21087,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -21164,22 +21351,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -21187,24 +21374,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -21212,11 +21399,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -21224,11 +21411,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -21236,11 +21423,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -21249,7 +21436,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -21257,22 +21444,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -21280,11 +21467,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -21294,79 +21481,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "深度" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -21374,17 +21561,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -21393,17 +21580,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -21546,7 +21733,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -22839,7 +23026,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -22947,7 +23134,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -24210,303 +24397,436 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +#, fuzzy +msgid "Interacting with light" +msgstr "插值与四元数" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -24518,6 +24838,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -24664,6 +24985,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -24678,6 +25000,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -24713,15 +25036,18 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 #, fuzzy msgid "Getting everything ready" msgstr "获取源代码" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -25000,7 +25326,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -25139,8 +25465,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -25521,11 +25847,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -25555,11 +25882,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -25669,9 +25997,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -25757,7 +26085,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -25765,7 +26093,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -25801,8 +26129,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -25832,7 +26160,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -25868,7 +26197,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -25945,7 +26274,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -25971,10 +26300,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -25997,8 +26326,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -26044,7 +26373,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -26072,9 +26401,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -26089,15 +26418,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -26110,7 +26439,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -26147,7 +26476,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -26168,7 +26497,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -26211,9 +26540,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -26251,92 +26580,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -26346,37 +26675,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -26386,32 +26715,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -26420,19 +26749,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -26440,26 +26769,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -26467,7 +26796,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -26476,7 +26805,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -26485,20 +26814,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -26507,66 +26836,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -26576,31 +26905,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -26610,51 +26939,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -26662,23 +26991,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -26686,45 +27015,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -26732,7 +27061,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -26742,51 +27071,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -26794,13 +27123,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -26808,65 +27137,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -26874,7 +27203,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -26882,84 +27211,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -26968,24 +27297,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -26993,56 +27322,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -27050,14 +27379,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -27065,7 +27394,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -27075,50 +27404,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -#, fuzzy -msgid "Add the following code:" -msgstr "添加下面这些头文件(导入)目录:" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -27127,7 +27451,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -27136,19 +27460,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -27157,47 +27481,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -27205,53 +27529,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -27261,11 +27585,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -27278,57 +27602,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -27516,7 +27840,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -27529,7 +27853,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -27581,8 +27905,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -27766,8 +28090,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -27912,7 +28235,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -28078,7 +28401,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -28091,7 +28414,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -28106,7 +28429,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -28116,8 +28439,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -28130,7 +28453,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -28215,7 +28538,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -28279,30 +28602,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -28310,108 +28633,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -28419,49 +28742,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -28469,27 +28792,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -28499,7 +28822,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -28508,14 +28831,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -28524,32 +28847,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -28557,7 +28880,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -28567,54 +28890,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -28622,38 +28945,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -28661,29 +28984,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -28692,29 +29015,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -28723,13 +29046,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -28737,18 +29060,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -28756,38 +29079,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -28795,38 +29118,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -28835,32 +29158,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -28868,7 +29191,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -28876,13 +29199,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -28890,20 +29213,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -28912,20 +29235,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -28934,71 +29257,72 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 #, fuzzy msgid "Add the following code to ``Target.gd``:" msgstr "在你的 ``config.py`` 脚本中添加下面的代码片段:" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -29008,11 +29332,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -29020,39 +29344,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -29061,67 +29385,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -29131,34 +29455,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -29166,20 +29490,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -30192,6 +30516,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -31953,15 +32278,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -34792,12 +35134,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "动画" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -36769,8 +37105,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -36987,10 +37323,11 @@ msgstr "" "以被看作是后续补充。" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 +#, fuzzy msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" "我们将使用官方演示作为一个例子, 你可以在 AssetLib下载它: https://godotengine." "org/asset-library/asset/134 或在 demo_projects/gui/translation 位置找到它" @@ -40815,11 +41152,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -40848,7 +41185,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" "视区还负责向其所有子节点传递关于适当调整和缩放的输入事件。根视区和子视区都会" @@ -40900,10 +41237,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -40965,7 +41302,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" "对于3D, 视区将包含一个:ref:`World `类。这基本上就是一个把物理和" "渲染联系在一起的宇宙世界。基于空间概念的节点将使用最接近的视区的世界进行注" @@ -41058,7 +41395,7 @@ msgstr "" "如果视区是:ref:`ViewportContainer `的子节点, 那么它" "将变为活动状态并显示其内部的任何内容。层级关系布局类似如下:" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 #, fuzzy msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" @@ -41071,7 +41408,7 @@ msgstr "" "完全覆盖其父控件的区域。但您必须设置Viewport的”Size“属性才能获取合适的视区部" "分。并且注意视区容器的尺寸不能小于视区本身的尺寸。" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -41082,7 +41419,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -41090,7 +41427,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -41098,43 +41435,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "渲染目标" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 #, fuzzy msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " @@ -41147,17 +41484,17 @@ msgstr "" "请注意, 该模式下任何视区内部的东西都不会在场景编辑器中看到。若要显示内容, 方" "法与之前一样。可以通过使用代码 来请求到需要的内容(如下):" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -41167,7 +41504,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 #, fuzzy msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " @@ -41182,7 +41519,7 @@ msgstr "" "是可见的, 就渲染它, 反之则不。此行为可以更改为手动渲染 (一次), 或始终渲染, 无" "论是否可见。" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 #, fuzzy msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " @@ -41198,37 +41535,39 @@ msgid "Multiple resolutions" msgstr "多分辨率" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" -msgstr "基本分辨率" +msgid "Base size" +msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 +#, fuzzy msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" "项目的基本屏幕分辨率可以在项目设置的 ``显示(display)``、``窗口(window)`` " "中指定" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -"然而, 这个设置所做的具体事情并不完全显而易见。比如在 PC 上运行时, 引擎将尝试" -"设置成此分辨率 (如果失败则使用更小的尺寸)。但在移动端、游戏主机或其他具有固定" -"分辨率或全屏渲染的设备上时, 此分辨率将被忽略, 取而代之使用设备的本机分辨率。" -"作为这个设置分辨率功能的补充, Godot提供了许多方法来控制屏幕尺寸的调整方式和拉" -"伸到不同的屏幕大小时的方式。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "调整尺寸" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -41244,7 +41583,7 @@ msgstr "" "点始终是一个Viewport (场景将作为它的子节点被实例化, 并且始终可以通过调用" "``get_tree().get_root()`` 或``get_node(\"/root\")`` 来访问它。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -41255,48 +41594,78 @@ msgstr "" "能包含大量工作、大量代码和大量推测过程, 因此Godot在“项目设置”中提供了一组简单" "的参数来处理多分辨率问题。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "拉伸设置" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "拉伸设置位于项目设置中, 它只是一系列提供多种选项的配置变量:" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +#, fuzzy +msgid "Stretch Mode" msgstr "拉伸模式 (Stretch mode)" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." -msgstr "" -"** Disabled **: 这是我们的第一个拉伸模式。默认情况下, 拉伸模式就是被禁用的," -"这意味着不发生任何拉伸(屏幕或窗口越大, 分辨率就越大, 总是匹配像素 1:1)。" - #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 +msgid "" +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 +msgid "" +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 +#, fuzzy +msgid "" +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" "** 2D **: 在这种模式下, 由”项目设置“中的display/width和display/height指定的分" "辨率将被拉伸至覆盖整个屏幕。这意味着3D将不受影响 (只不过渲染到更高的分辨率), " "2D也将渲染到更高的分辨率, 只是增大了。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 +#, fuzzy +msgid "" +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." msgstr "" "** Viewport **: Viewport模式的缩放就有所不同, 根节点位置的:ref:`Viewport " "` 被设置为“渲染目标”, 并且仍然精确按照“项目设置”中的 " @@ -41304,66 +41673,144 @@ msgstr "" "幕大小。当处理像素精确的游戏或者为了提高性能而渲染到低分辨率时,这个模式很有" "用。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +#, fuzzy +msgid "Stretch Aspect" msgstr "拉伸比例(Stretch aspect)" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +#, fuzzy +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." msgstr "" "** Ignore **: 在拉伸屏幕时忽略长宽比。这意味着在适配新的屏幕尺寸时,原始分辨" "率将被拉伸, 即使它更宽或更窄。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +#, fuzzy msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." msgstr "" "** Keep **: 拉伸屏幕时保持纵横比。这意味着在适配新的屏幕尺寸时, 将保留原始分" "辨率, 黑色条状图将被添加到屏幕的两侧或顶部/底部。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." msgstr "" -"** Keep Width **: 拉伸屏幕时保持纵横比, 但如果最终屏幕高度比指定分辨率更高, " -"则垂直拉伸 (在viewport中按比例显示更多垂直分辨率)。这通常是创建可缩放的 GUI " -"或 HUD 的最佳选项, 因此某些控件就可以锚定到底部了 (见文章:ref:" -"`doc_size_and_anchors`)。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." msgstr "" -"** Keep Height **: 拉伸屏幕时保持纵横比, 但如果最终屏幕宽度比指定分辨率更宽, " -"则将水平拉伸 (按比例显示更多水平分辨率)。对于2D横板滚轴游戏来说, 这通常是最好" -"的选择 (如跑酷类和平台跳跃类游戏)。" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +#, fuzzy +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." msgstr "" "** Expand **: 拉伸屏幕时保持纵横比, 但不保持宽度和高度。视屏幕纵横比而定, 视" "区将显示更多水平分辨率 (如果屏幕宽度比原始分辨率宽) 或更多垂直分辨率 (如果屏" "幕高度比原始分辨率高)。" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +#, fuzzy +msgid "Stretch Shrink" +msgstr "拉伸设置" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +#, fuzzy +msgid "From scripts" +msgstr "自定义脚本" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." +msgstr "" + #: ../../docs/tutorials/shading/index.rst:2 msgid "Shading" msgstr "" @@ -41420,7 +41867,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -42156,10 +42603,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -42980,7 +43423,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -43205,7 +43648,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -43271,9 +43714,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -43351,7 +43794,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -43494,7 +43937,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -43538,7 +43981,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -43555,7 +43998,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -43690,7 +44133,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -43719,8 +44162,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -43737,7 +44180,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -43746,7 +44189,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -43892,12 +44335,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -43961,7 +44404,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -43978,261 +44421,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -46138,6 +46580,1819 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +#, fuzzy +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr ":ref:`RigidBody2D ` (名为 ``Mob``)" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +#, fuzzy +msgid "Starting VR" +msgstr "脚本" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +#, fuzzy +msgid "Coding the controllers" +msgstr "自定义控件" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +#, fuzzy +msgid "Adding destroyable targets" +msgstr "添加脚本" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +#, fuzzy +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "添加一条脚本到``Mob``然后添加以下成员变量:" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +#, fuzzy +msgid "Adding a pistol" +msgstr "添加脚本" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Godot没有任何使用限制" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +#, fuzzy +msgid "Adding a shotgun" +msgstr "添加脚本" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +#, fuzzy +msgid "Adding a bomb" +msgstr "添加脚本" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +#, fuzzy +msgid "Adding a sword" +msgstr "添加脚本" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +#, fuzzy +msgid "Updating the target UI" +msgstr "导入项目" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "插件" @@ -51636,8 +53891,9 @@ msgid "Compiling with Mono" msgstr "编译Mono模块" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" -msgstr "" +#, fuzzy +msgid "Mono 5.12.0 or greater" +msgstr "Mono 5.2.0+ (mono-complete)" #: ../../docs/development/compiling/compiling_with_mono.rst:12 msgid "MSBuild" @@ -51687,10 +53943,12 @@ msgid "Generate The Glue" msgstr "生成胶水代码" #: ../../docs/development/compiling/compiling_with_mono.rst:30 +#, fuzzy msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" "这些粘合代码用于封装 mono 所需要的一些功能。要生成这些代码,你需要首先通过 " "``tools=yes`` 和 ``mono_glue=no`` 配置构建一遍 Godot:" @@ -51730,21 +53988,24 @@ msgid "Notes" msgstr "注意" #: ../../docs/development/compiling/compiling_with_mono.rst:48 +#, fuzzy msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" "**不要** 使用 ``mono_glue=no`` 配置来构建你的发布版 Godot。 此选项会禁用C#脚" "本,它的构建结果是仅用于控制生成胶水代码的临时二进制文件。Godot 会在启动时打" "印一条消息,提醒你这件事。" #: ../../docs/development/compiling/compiling_with_mono.rst:49 +#, fuzzy msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" "胶水代码在每次 ClassDB 的API有变动时都要重新生成。 如果有API和生成的胶水代码" "不匹配, Godot 将在启动时在控制台输出错误信息。" @@ -51767,6 +54028,61 @@ msgstr "" "如果一切顺利的话, 除了通常的可执行文件之外 Scons 应该还在 ``bin`` 目录下生成" "了 **GodotSharpTools.dll* 文件。" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +#, fuzzy +msgid "Command-line options" +msgstr "命令行" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +#, fuzzy +msgid "default: no" +msgstr "默认环境" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +#, fuzzy +msgid "default: yes" +msgstr "默认功能" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -54505,7 +56821,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -54565,15 +56881,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -54705,7 +57017,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -54781,19 +57093,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -54805,15 +57117,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -54851,8 +57163,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -54936,7 +57248,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -55287,10 +57599,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"除此之外, 您还可以学习各种 `Godot Demo项目 `_ 。" #: ../../docs/community/contributing/pr_workflow.rst:36 msgid "" @@ -57686,6 +60001,57 @@ msgid "" "`_" msgstr "" +#~ msgid "Base resolution" +#~ msgstr "基本分辨率" + +#~ msgid "" +#~ "However, what it does is not completely obvious. When running on PC, the " +#~ "engine will attempt to set this resolution (or use something smaller if " +#~ "it fails). On mobile, consoles or devices with a fixed resolution or full " +#~ "screen rendering, this resolution will be ignored and the native " +#~ "resolution will be used instead. To compensate for this, Godot offers " +#~ "many ways to control how the screen will resize and stretch to different " +#~ "screen sizes." +#~ msgstr "" +#~ "然而, 这个设置所做的具体事情并不完全显而易见。比如在 PC 上运行时, 引擎将尝" +#~ "试设置成此分辨率 (如果失败则使用更小的尺寸)。但在移动端、游戏主机或其他具" +#~ "有固定分辨率或全屏渲染的设备上时, 此分辨率将被忽略, 取而代之使用设备的本机" +#~ "分辨率。作为这个设置分辨率功能的补充, Godot提供了许多方法来控制屏幕尺寸的" +#~ "调整方式和拉伸到不同的屏幕大小时的方式。" + +#~ msgid "" +#~ "**Disabled**: The first is the stretch mode. By default this is disabled, " +#~ "which means no stretching happens (the bigger the screen or window, the " +#~ "bigger the resolution, always matching pixels 1:1)." +#~ msgstr "" +#~ "** Disabled **: 这是我们的第一个拉伸模式。默认情况下, 拉伸模式就是被禁用" +#~ "的,这意味着不发生任何拉伸(屏幕或窗口越大, 分辨率就越大, 总是匹配像素 " +#~ "1:1)。" + +#~ msgid "" +#~ "**Keep Width**: Keep aspect ratio when stretching the screen, but if the " +#~ "resulting screen is taller than the specified resolution, it will be " +#~ "stretched vertically (and more vertical resolution will be reported in " +#~ "the viewport, proportionally). This is usually the best option for " +#~ "creating GUIs or HUDs that scale, so some controls can be anchored to the " +#~ "bottom (:ref:`doc_size_and_anchors`)." +#~ msgstr "" +#~ "** Keep Width **: 拉伸屏幕时保持纵横比, 但如果最终屏幕高度比指定分辨率更" +#~ "高, 则垂直拉伸 (在viewport中按比例显示更多垂直分辨率)。这通常是创建可缩放" +#~ "的 GUI 或 HUD 的最佳选项, 因此某些控件就可以锚定到底部了 (见文章:ref:" +#~ "`doc_size_and_anchors`)。" + +#~ msgid "" +#~ "**Keep Height**: Keep aspect ratio when stretching the screen, but if the " +#~ "resulting screen is wider than the specified resolution, it will be " +#~ "stretched horizontally (and more horizontal resolution will be reported " +#~ "in the viewport, proportionally). This is usually the best option for 2D " +#~ "games that scroll horizontally (like runners or platformers)." +#~ msgstr "" +#~ "** Keep Height **: 拉伸屏幕时保持纵横比, 但如果最终屏幕宽度比指定分辨率更" +#~ "宽, 则将水平拉伸 (按比例显示更多水平分辨率)。对于2D横板滚轴游戏来说, 这通" +#~ "常是最好的选择 (如跑酷类和平台跳跃类游戏)。" + #~ msgid "" #~ "It is a free, open source IDE (Integrated Development Environment) for " #~ "Linux, Solaris, FreeBSD, Mac OS X and other Unix flavors." @@ -57795,8 +60161,5 @@ msgstr "" #~ "如你所见, 使用 C++ 进行Godot开发如此简单。只需要按照你往常那样编写你的模" #~ "块代码, 同时需要记住这几点就可以了:" -#~ msgid "Mono 5.2.0+ (mono-complete)" -#~ msgstr "Mono 5.2.0+ (mono-complete)" - #~ msgid "**Never!**" #~ msgstr "**绝对不要这样做**" diff --git a/weblate/zh_TW.po b/weblate/zh_TW.po index 1a5bb09edf..26b8e6f140 100644 --- a/weblate/zh_TW.po +++ b/weblate/zh_TW.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" -"POT-Creation-Date: 2018-06-28 18:31+0200\n" +"POT-Creation-Date: 2018-07-18 14:59+0200\n" "PO-Revision-Date: 2018-07-15 16:35+0000\n" "Last-Translator: Kisaragi Hiu \n" "Language-Team: Chinese (Traditional) ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:832 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:837 msgid "The HUD displays the following information:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:834 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:839 msgid "Score, changed by ``ScoreTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:835 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:840 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:836 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:841 msgid "A \"Start\" button to begin the game." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:838 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:843 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:842 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid "Create the following as children of the ``HUD`` node:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:844 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:845 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:850 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:846 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:851 msgid ":ref:`Button ` named ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:847 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:852 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:849 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:854 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " @@ -3375,109 +3386,109 @@ msgid "" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:856 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:861 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:866 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:865 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "ScoreLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:867 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "``Layout``: \"Center Top\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:868 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:881 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:894 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "``Margin``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:870 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Left: ``-25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:871 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:876 msgid "Top: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:872 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:877 msgid "Right: ``25``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:873 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "Bottom: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:875 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "Text: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:878 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "MessageLabel" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:880 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "``Layout``: \"Center\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:883 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Left: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:884 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:889 msgid "Top: ``-150``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:885 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:890 msgid "Right: ``200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:886 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "Bottom: ``0``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:888 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "Text: ``Dodge the Creeps!``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:891 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "StartButton" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:893 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "``Layout``: \"Center Bottom\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:896 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Left: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:897 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:902 msgid "Top: ``-200``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:898 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "Right: ``100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:899 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:904 msgid "Bottom: ``-100``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:901 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:906 msgid "Text: ``Start``" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:903 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." @@ -3485,55 +3496,55 @@ msgid "" "nodes:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:908 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:912 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:917 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:918 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:923 msgid "Now add this script to ``HUD``:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:935 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:940 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:963 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:992 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1012 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1042 msgid "Connecting HUD to Main" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1044 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " @@ -3541,57 +3552,57 @@ msgid "" "like this, so make sure you didn't miss anything:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1051 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1054 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1057 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1072 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1084 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1097 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1101 msgid "Finishing Up" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1108 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1110 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " @@ -3601,17 +3612,17 @@ msgid "" "screen." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1117 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1121 msgid "Sound Effects" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " @@ -3619,7 +3630,7 @@ msgid "" "for when the player loses." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " @@ -3627,55 +3638,55 @@ msgid "" "corresponding audio file." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 -#: ../../docs/tutorials/shading/shading_language.rst:1077 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1139 +#: ../../docs/tutorials/shading/shading_language.rst:1081 msgid "Particles" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1141 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1145 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1156 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " @@ -3683,17 +3694,17 @@ msgid "" "set it all the way to ``0``." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1170 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1174 msgid "Project Files" msgstr "" -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 +#: ../../docs/getting_started/step_by_step/your_first_game.rst:1176 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" @@ -4041,7 +4052,7 @@ msgid "" "structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " @@ -4050,24 +4061,24 @@ msgid "" "limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " @@ -4076,11 +4087,11 @@ msgid "" "city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " @@ -4088,7 +4099,7 @@ msgid "" "and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " @@ -4097,7 +4108,7 @@ msgid "" "matches the game’s design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " @@ -4105,18 +4116,18 @@ msgid "" "components like collision shapes, they’re the exception, not the norm." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " @@ -4124,7 +4135,7 @@ msgid "" "on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " @@ -4132,7 +4143,7 @@ msgid "" "`__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " @@ -4140,28 +4151,28 @@ msgid "" "and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " -"types and offers a static-language's quality of auto-completion. It is also " +"types and offers a static language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " @@ -4170,32 +4181,33 @@ msgid "" "a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " -"states and transitions visually*" +"states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 -msgid "Open-source" +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 msgid "" -"Godot offers a fully open-source codebase under the **MIT license.** This " +"Godot offers a fully open source codebase under the **MIT license**. This " "means all the technologies that ship with it have to be Free (as in freedom) " -"as well. For the most part, they’re coded from the ground-up by contributors." +"as well. For the most part, they’re developed from the ground up by " +"contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 msgid "" -"Anyone can plug in proprietary tools for the needs of their projects - they " -"just won’t ship with the engine. This may include NViDia PhysX, Google " -"Admob, or an FBX file importer. Any of these can come as third-party plugins " -"instead." +"Anyone can plug in proprietary tools for the needs of their projects — they " +"just won’t ship with the engine. This may include NVIDIA PhysX, Google " +"AdMob, or an FBX model importer. Any of these can come as third-party " +"plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " @@ -4203,17 +4215,17 @@ msgid "" "engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " @@ -4221,7 +4233,7 @@ msgid "" "what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " @@ -4230,11 +4242,11 @@ msgid "" "release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " @@ -4242,36 +4254,36 @@ msgid "" "scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 msgid "" -"*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " +"*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 msgid "" -"Put the ``tool`` keyword at the top of any GDscript file and it will run in " +"Put the ``tool`` keyword at the top of any GDScript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 +#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 msgid "" -"Godot offers dedicated 2D and 3D rendering engines. As a result **the base " +"Godot offers dedicated 2D and 3D rendering engines. As a result, **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " -"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " +"can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over " "your 3D world." msgstr "" @@ -8798,9 +8810,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1085 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1102 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 @@ -12203,8 +12215,8 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 -#: ../../docs/tutorials/shading/shading_language.rst:1040 -#: ../../docs/tutorials/shading/shading_language.rst:1098 +#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1102 msgid "Built-In" msgstr "" @@ -12322,7 +12334,7 @@ msgstr "" msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " -"error in run-time if the types feeded do not match for the operator). It is " +"error in run-time if the types fed do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" @@ -13377,7 +13389,7 @@ msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " -"the above mentioned conventions:" +"above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 @@ -13569,28 +13581,28 @@ msgstr "" msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:19 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:20 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:26 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:31 msgid "Build Pipeline Integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:32 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " @@ -13681,59 +13693,6 @@ msgid "" "exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 -#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 -msgid "Lights" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 -msgid "" -"By default, lamps in Blender have shadows enabled. This can cause " -"performance issues in Godot." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 -msgid "" -"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " -"is released, this will be removed and this part of the exporter will change." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 -msgid "" -"Sun, point and spot lamps are all exported from Blender along with many of " -"their properties:" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 -#, fuzzy -msgid "There are some things to note:" -msgstr "Godot 沒有使用限制" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 -msgid "" -"In Blender, a light casts light all the way to infinity. In Godot, it is " -"clamped by the attenuation distance. To most closely match between the " -"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 -msgid "" -"Light attenuation models differ between Godot and Blender. The exporter " -"attempts to make them match, but it isn't always very good." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 -msgid "" -"Spotlight angular attenuation models also differ between Godot and Blender. " -"The exporter attempts to make them similar, but it doesn't always look the " -"same." -msgstr "" - -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 -msgid "" -"There is no difference between buffer shadow and ray shadow in the export." -msgstr "" - #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" @@ -13793,6 +13752,13 @@ msgid "" "what you want." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:41 +msgid "" +"To build compound physics shapes, parent together multiple objects with " +"rigid body enabled. The physics properties are taken from the parent-most " +"rigid body, and the rest are used as collision shapes." +msgstr "" + #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" @@ -13812,6 +13778,220 @@ msgid "" "working on the models, so this works out fairly nicely." msgstr "" +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/3d/introduction_to_3d.rst:214 +msgid "Lights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +msgid "" +"By default, lamps in Blender have shadows enabled. This can cause " +"performance issues in Godot." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +msgid "" +"Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " +"is released, this will be removed and this part of the exporter will change." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +msgid "" +"Sun, point and spot lamps are all exported from Blender along with many of " +"their properties:" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#, fuzzy +msgid "There are some things to note:" +msgstr "Godot 沒有使用限制" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +msgid "" +"In Blender, a light casts light all the way to infinity. In Godot, it is " +"clamped by the attenuation distance. To most closely match between the " +"viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +msgid "" +"Light attenuation models differ between Godot and Blender. The exporter " +"attempts to make them match, but it isn't always very good." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +msgid "" +"Spotlight angular attenuation models also differ between Godot and Blender. " +"The exporter attempts to make them similar, but it doesn't always look the " +"same." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +msgid "" +"There is no difference between buffer shadow and ray shadow in the export." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +msgid "Mesh" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +msgid "Modifiers" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +msgid "" +"There is an exporting option :code:`Apply Modifiers` to control whether mesh " +"modifiers are applied to the exported mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +msgid "Shape Key" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +msgid "" +"Exporting mesh shape key is supported, however exporting each shape key is " +"almost like exporting the mesh again, so don't be surprisied it takes a " +"relatively long time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +msgid "" +"A lot of modifiers are not compatible with shape keys (e.g. subsurface " +"modifier), so if you found you have incorrect shape keys exported, try to " +"disable :code:`Apply Modifiers` and do the exporting again. Besides, it is " +"worthwhile to report the incompatible modifier to the `issue list `__, which helps to " +"develop the exporter to have a more precise check of modifiers." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/development/file_formats/tscn.rst:154 +msgid "Skeleton" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +msgid "Rest Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +msgid "" +"Armature object in Blender is exported as a Skeleton node along with rest " +"position (transform in Godot) of bones." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +msgid "" +"The three check boxes :code:`Inheirt Rotation`, :code:`Inheirt Scale`, :code:" +"`Local Location` (colored in red) must be ticked when building armature in " +"Blender, so that the exported bone transform would be consistant between " +"Blender and Godot" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:19 +msgid "Bone Weights" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:21 +msgid "" +"Blender put rigged mesh vertices which has no bone weights at its original " +"position, but these vertices would be placed at (0, 0, 0) in Godot, which " +"making the mesh deformed. Therefore, the exporter would raise an error for " +"any no bone weights vertex detected in a rigged mesh." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:27 +msgid "Non-Deform Bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:29 +msgid "" +"Note that the non-deform bone can be configured as not exported by enable " +"the :code:`Exclude Control Bones`, the deform bone checkbox is shown in " +"picture." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:35 +msgid "Bone Attachment" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:36 +msgid "" +"Bone can be parent of object in Blender, this relation is exported as a " +"BoneAttachment node in the Godot scene." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/animation/index.rst:2 +#: ../../docs/tutorials/animation/cutout_animation.rst:279 +#: ../../docs/development/file_formats/tscn.rst:365 +msgid "Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +msgid "Supported Animation" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +msgid "transform animation of all types of object" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +msgid "transform animation of pose bone" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:10 +msgid "Action Lib" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +msgid "" +"Every action in object's nla tracks would be exported as a separate track " +"and placed in AnimationPlayer." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:15 +msgid "Placing of AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +msgid "" +"Godot and Blender have different structure to store animation data. In Godot " +"animation data is stored in an AnimationPlayer node, instead of in each " +"animated node." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:20 +msgid "" +"The exporter has an option :code:`Separate AnimationPlayer For Each Object` " +"which controls how the exported AnimationPlayers are placed." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:24 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **disabled** children " +"of any animated object shares one AnimationPlayer" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:27 +msgid "" +"In the following case, animation data of Mesh is also exported to " +"AnimationPlayer \"RigAnimation\"" +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:34 +msgid "" +"If :code:`Separate AnimationPlayer For Each Object` is **enabled** every " +"animated object got its own AnimationPlayer. It is useful when artists want " +"to play multiple animation concurrently, because one AnimationPlayer node " +"can only play one track at a time." +msgstr "" + +#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:39 +msgid "In the following case, Mesh and Rig have their own AnimationPlayer" +msgstr "" + #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" @@ -14251,7 +14431,7 @@ msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" -"Some special processes can be applied to images when importe as texture." +"Some special processes can be applied to images when imported as textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 @@ -19235,7 +19415,7 @@ msgid "" "Rendering objects efficiently in high amounts is easy, but when a large " "scene must be rendered, it can become inefficient. To solve this, visibility " "computation must be added to the rendering, which makes rendering less " -"efficient, but, at the same time, less objects are rendered, so efficiency " +"efficient, but, at the same time, fewer objects are rendered, so efficiency " "overall improves." msgstr "" @@ -19278,7 +19458,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:42 -#: ../../docs/tutorials/viewports/viewports.rst:175 +#: ../../docs/tutorials/viewports/viewports.rst:174 msgid "Rendering" msgstr "" @@ -19303,10 +19483,10 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:57 msgid "" -"**Reusing Materials**: The less amount of different materials in the scene, " -"the faster the rendering will be. If a scene has a huge amount of objects " -"(in the hundreds or thousands) try reusing the materials or in the worst " -"case use atlases." +"**Reusing Materials**: The fewer different materials in the scene, the " +"faster the rendering will be. If a scene has a huge amount of objects (in " +"the hundreds or thousands) try reusing the materials or in the worst case " +"use atlases." msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:61 @@ -19385,7 +19565,7 @@ msgid "" "it), which divide the screen into a grid. Each cell keeps the list of " "triangles drawn to it and sorts them by depth to minimize *overdraw*. This " "technique improves performance and reduces power consumption, but takes a " -"toll on vertex performance. As a result, less vertices and triangles can be " +"toll on vertex performance. As a result, fewer vertices and triangles can be " "processed for drawing." msgstr "" @@ -19476,7 +19656,7 @@ msgstr "" #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:164 msgid "" -"As also mentioned before, using objects with less vertices can improve " +"As also mentioned before, using objects with fewer vertices can improve " "performance in some cases. Godot has a simple system to change level of " "detail, :ref:`GeometryInstance ` based objects have " "a visibility range that can be defined. Having several GeometryInstance " @@ -19596,18 +19776,18 @@ msgid "" "pure, unlit, color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:55 +#: ../../docs/tutorials/3d/spatial_material.rst:54 msgid "Vertex Lighting" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:57 +#: ../../docs/tutorials/3d/spatial_material.rst:56 msgid "" "Godot has a more or less uniform cost per pixel (thanks to depth pre pass). " "All lighting calculations are made by running the lighting shader on every " "pixel." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:60 +#: ../../docs/tutorials/3d/spatial_material.rst:59 msgid "" "As these calculations are costly, performance can be brought down " "considerably in some corner cases such as drawing several layers of " @@ -19615,108 +19795,108 @@ msgid "" "may help these cases." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:63 +#: ../../docs/tutorials/3d/spatial_material.rst:62 msgid "" "Additionally, on low-end or mobile devices, switching to vertex lighting can " "considerably increase rendering performance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:68 +#: ../../docs/tutorials/3d/spatial_material.rst:67 msgid "" "Keep in mind that when vertex lighting is enabled, only directional lighting " "can produce shadows (for performance reasons)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:71 +#: ../../docs/tutorials/3d/spatial_material.rst:70 msgid "No Depth Test" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:73 +#: ../../docs/tutorials/3d/spatial_material.rst:72 msgid "" "In order for close objects to appear over far away objects, depth testing is " "performed. Disabling it has the result of objects appearing over (or under) " "everything else." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:76 +#: ../../docs/tutorials/3d/spatial_material.rst:75 msgid "" "Disabling this makes the most sense for drawing indicators in world space, " "and works very well with the \"render priority\" property of Material (see " "bottom)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:82 +#: ../../docs/tutorials/3d/spatial_material.rst:81 msgid "Use Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:84 +#: ../../docs/tutorials/3d/spatial_material.rst:83 msgid "" "This option is only active when the geometry rendered is made of points (it " "generally is just made of triangles when imported from 3D DCCs). If so, then " "points can be sized (see below)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:89 +#: ../../docs/tutorials/3d/spatial_material.rst:88 msgid "World Triplanar" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:91 +#: ../../docs/tutorials/3d/spatial_material.rst:90 msgid "" "When using triplanar mapping (see below, in the UV1 and UV2 settings) " "triplanar is computed in object local space. This option makes triplanar " "work in world space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:95 +#: ../../docs/tutorials/3d/spatial_material.rst:94 msgid "Fixed Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:97 +#: ../../docs/tutorials/3d/spatial_material.rst:96 msgid "" "Makes the object rendered at the same size no matter the distance. This is, " "again, useful mostly for indicators (no depth test and high render priority) " "and some types of billboards." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:101 +#: ../../docs/tutorials/3d/spatial_material.rst:100 msgid "Do Not Receive Shadows" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:103 +#: ../../docs/tutorials/3d/spatial_material.rst:102 msgid "" "Makes the object not receive any kind of shadow that would otherwise be cast " "onto it." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:106 +#: ../../docs/tutorials/3d/spatial_material.rst:105 msgid "Vertex Color" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:108 +#: ../../docs/tutorials/3d/spatial_material.rst:107 msgid "" "This menu allows choosing what is done by default to vertex colors that come " "from your 3D modelling application. By default, they are ignored." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:114 +#: ../../docs/tutorials/3d/spatial_material.rst:113 msgid "Use as Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:116 +#: ../../docs/tutorials/3d/spatial_material.rst:115 msgid "Vertex color is used as albedo color." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:119 +#: ../../docs/tutorials/3d/spatial_material.rst:118 msgid "Is SRGB" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:121 +#: ../../docs/tutorials/3d/spatial_material.rst:120 msgid "" "Most 3D DCCs will likely export vertex colors as SRGB, so toggling this " "option on will help them look correct." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:126 +#: ../../docs/tutorials/3d/spatial_material.rst:125 #: ../../docs/tutorials/platform/services_for_ios.rst:86 #: ../../docs/tutorials/platform/services_for_ios.rst:126 #: ../../docs/tutorials/platform/services_for_ios.rst:176 @@ -19725,261 +19905,262 @@ msgstr "" msgid "Parameters" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:128 +#: ../../docs/tutorials/3d/spatial_material.rst:127 msgid "" "SpatialMaterial also has several configurable parameters to tweak many " "aspects of the rendering:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:133 +#: ../../docs/tutorials/3d/spatial_material.rst:132 msgid "Diffuse Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:135 +#: ../../docs/tutorials/3d/spatial_material.rst:134 msgid "" "Specifies the algorithm used by diffuse scattering of light when hitting the " "object. The default one is Burley. Other modes are also available:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:138 +#: ../../docs/tutorials/3d/spatial_material.rst:137 msgid "" "**Burley:** Default mode, the original Disney Principled PBS diffuse " "algorithm." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:139 +#: ../../docs/tutorials/3d/spatial_material.rst:138 msgid "**Lambert:** Is not affected by roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:140 +#: ../../docs/tutorials/3d/spatial_material.rst:139 msgid "" "**Lambert Wrap:** Extends Lambert to cover more than 90 degrees when " "roughness increases. Works great for hair and simulating cheap subsurface " "scattering. This implementation is energy conserving." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:141 +#: ../../docs/tutorials/3d/spatial_material.rst:140 msgid "" "**Oren Nayar:** This implementation aims to take microsurfacing into account " "(via roughness). Works well for clay-like materials and some types of cloth." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:142 +#: ../../docs/tutorials/3d/spatial_material.rst:141 msgid "" "**Toon:** Provides a hard cut for lighting, with smoothing affected by " -"roughness." +"roughness. It is recommended you disable sky contribution from your " +"environment's ambient light settings to achieve a better effect." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:147 +#: ../../docs/tutorials/3d/spatial_material.rst:146 msgid "Specular Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:149 +#: ../../docs/tutorials/3d/spatial_material.rst:148 msgid "" "Specifies how the specular blob will be rendered. The specular blob " "represents the shape of a light source reflected in the object." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:151 +#: ../../docs/tutorials/3d/spatial_material.rst:150 msgid "**ShlickGGX:** The most common blob used by PBR 3D engines nowadays." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:152 +#: ../../docs/tutorials/3d/spatial_material.rst:151 msgid "" "**Blinn:** Common in previous-generation engines. Not worth using nowadays " "but left here for the sake of compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:153 +#: ../../docs/tutorials/3d/spatial_material.rst:152 msgid "**Phong:** Same as above." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:154 +#: ../../docs/tutorials/3d/spatial_material.rst:153 msgid "" "**Toon:** Creates a toon blob, which changes size depending on roughness." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:155 +#: ../../docs/tutorials/3d/spatial_material.rst:154 msgid "**Disabled:** Sometimes, that blob gets in the way. Be gone!" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:161 +#: ../../docs/tutorials/3d/spatial_material.rst:160 msgid "Blend Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:163 +#: ../../docs/tutorials/3d/spatial_material.rst:162 msgid "" "Controls the blend mode for the material. Keep in mind that any mode other " "than Mix forces the object to go through transparent pipeline." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:165 +#: ../../docs/tutorials/3d/spatial_material.rst:164 msgid "Mix: Default blend mode, alpha controls how much the object is visible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:166 +#: ../../docs/tutorials/3d/spatial_material.rst:165 msgid "" "Add: Object is blended additively, nice for flares or some fire-like effects." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:167 +#: ../../docs/tutorials/3d/spatial_material.rst:166 msgid "Sub: Object is subtracted." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:168 +#: ../../docs/tutorials/3d/spatial_material.rst:167 msgid "Mul: Object is multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:173 +#: ../../docs/tutorials/3d/spatial_material.rst:172 msgid "Cull Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:175 +#: ../../docs/tutorials/3d/spatial_material.rst:174 msgid "" "Determines which side of the object is not drawn when back-faces are " "rendered:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:177 +#: ../../docs/tutorials/3d/spatial_material.rst:176 msgid "Back: Back of the object is culled when not visible (default)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:178 +#: ../../docs/tutorials/3d/spatial_material.rst:177 msgid "Front: Front of the object is culled when not visible" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:179 +#: ../../docs/tutorials/3d/spatial_material.rst:178 msgid "" "Disabled: Used for objects that are double sided (no culling is performed)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:182 +#: ../../docs/tutorials/3d/spatial_material.rst:181 msgid "Depth Draw Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:184 +#: ../../docs/tutorials/3d/spatial_material.rst:183 msgid "Specifies when depth rendering must take place." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:186 +#: ../../docs/tutorials/3d/spatial_material.rst:185 msgid "Opaque Only (default): Depth is only drawn for opaque objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:187 +#: ../../docs/tutorials/3d/spatial_material.rst:186 msgid "Always: Depth draw is drawn for both opaque and transparent objects" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:188 +#: ../../docs/tutorials/3d/spatial_material.rst:187 msgid "" "Never: No depth draw takes place (note: do not confuse with depth test " "option above)" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:189 +#: ../../docs/tutorials/3d/spatial_material.rst:188 msgid "" "Depth Pre-Pass: For transparent objects, an opaque pass is made first with " "the opaque parts, then transparency is drawn above. Use this option with " "transparent grass or tree foliage." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:195 +#: ../../docs/tutorials/3d/spatial_material.rst:194 msgid "Line Width" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:197 +#: ../../docs/tutorials/3d/spatial_material.rst:196 msgid "" "When drawing lines, specify the width of the lines being drawn. This option " "is not available in most modern hardware." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:200 +#: ../../docs/tutorials/3d/spatial_material.rst:199 msgid "Point Size" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:202 +#: ../../docs/tutorials/3d/spatial_material.rst:201 msgid "When drawing points, specify the point size in pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:205 +#: ../../docs/tutorials/3d/spatial_material.rst:204 msgid "Billboard Mode" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:207 +#: ../../docs/tutorials/3d/spatial_material.rst:206 msgid "" "Enables billboard mode for drawing materials. This controls how the object " "faces the camera:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:209 +#: ../../docs/tutorials/3d/spatial_material.rst:208 msgid "Disabled: Billboard mode is disabled" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:210 +#: ../../docs/tutorials/3d/spatial_material.rst:209 msgid "" "Enabled: Billboard mode is enabled, object -Z axis will always face the " "camera." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:211 +#: ../../docs/tutorials/3d/spatial_material.rst:210 msgid "Y-Billboard: Object X axis will always be aligned with the camera" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:212 +#: ../../docs/tutorials/3d/spatial_material.rst:211 msgid "" "Particles: When using particle systems, this type of billboard is best, " "because it allows specifying animation options." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:216 +#: ../../docs/tutorials/3d/spatial_material.rst:215 msgid "Above options are only enabled for Particle Billboard." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:219 +#: ../../docs/tutorials/3d/spatial_material.rst:218 msgid "Grow" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:221 +#: ../../docs/tutorials/3d/spatial_material.rst:220 msgid "Grows the object vertices in the direction pointed by their normals:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:225 +#: ../../docs/tutorials/3d/spatial_material.rst:224 msgid "" "This is commonly used to create cheap outlines. Add a second material pass, " "make it black and unshaded, reverse culling (Cull Front), and add some grow:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:232 +#: ../../docs/tutorials/3d/spatial_material.rst:230 msgid "Use Alpha Scissor" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:234 +#: ../../docs/tutorials/3d/spatial_material.rst:232 msgid "" "When transparency other than 0 or 1 is not needed, it's possible to set a " "threshold to avoid the object from rendering these pixels." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:238 +#: ../../docs/tutorials/3d/spatial_material.rst:236 msgid "" "This renders the object via the opaque pipeline which is faster and allows " "it to do mid and post process effects such as SSAO, SSR, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:241 +#: ../../docs/tutorials/3d/spatial_material.rst:239 msgid "Material colors, maps and channels" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:243 +#: ../../docs/tutorials/3d/spatial_material.rst:241 msgid "" "Besides the parameters, what defines materials themselves are the colors, " "textures and channels. Godot supports a extensive list of them. They will be " "described in detail below:" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:247 +#: ../../docs/tutorials/3d/spatial_material.rst:244 msgid "Albedo" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:249 +#: ../../docs/tutorials/3d/spatial_material.rst:246 msgid "" "Albedo is the base color for the material. Everything else works based on " "it. When set to *unshaded* this is the only color that is visible as-is. In " @@ -19988,22 +20169,22 @@ msgid "" "calculations than just the diffuse lighting path." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:255 +#: ../../docs/tutorials/3d/spatial_material.rst:252 msgid "Albedo color and texture can be used together as they are multiplied." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:257 +#: ../../docs/tutorials/3d/spatial_material.rst:254 msgid "" "*Alpha channel* in albedo color and texture is also used for the object " "transparency. If you use a color or texture with *alpha channel*, make sure " "to either enable transparency or *alpha scissoring* for it to work." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:262 +#: ../../docs/tutorials/3d/spatial_material.rst:259 msgid "Metallic" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:264 +#: ../../docs/tutorials/3d/spatial_material.rst:261 msgid "" "Godot uses a Metallic model over competing models due to its simplicity. " "This parameter pretty much defines how reflective the materials is. The more " @@ -20011,24 +20192,24 @@ msgid "" "light. This model is called \"energy conserving\"." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:269 +#: ../../docs/tutorials/3d/spatial_material.rst:266 msgid "" "The \"specular\" parameter here is just a general amount of for the " "reflectivity (unlike *metallic*, this one is not energy conserving, so " "simply leave it as 0.5 and don't touch it unless you need to)." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:273 +#: ../../docs/tutorials/3d/spatial_material.rst:270 msgid "" "The minimum internal reflectivity is 0.04, so (just like in real life) it's " "impossible to make a material completely unreflective." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:279 +#: ../../docs/tutorials/3d/spatial_material.rst:276 msgid "Roughness" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:281 +#: ../../docs/tutorials/3d/spatial_material.rst:278 msgid "" "Roughness affects mainly the way reflection happens. A value of 0 makes it a " "perfect mirror while a value of 1 completely blurs the reflection " @@ -20036,11 +20217,11 @@ msgid "" "be achieved from the right combination of *Metallic* and *Roughness*." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:288 +#: ../../docs/tutorials/3d/spatial_material.rst:285 msgid "Emission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:290 +#: ../../docs/tutorials/3d/spatial_material.rst:287 msgid "" "Emission specifies how much light is emitted by the material (keep in mind " "this does not do lighting on surrounding geometry unless GI Probe is used). " @@ -20048,11 +20229,11 @@ msgid "" "other lighting in the scene." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:299 +#: ../../docs/tutorials/3d/spatial_material.rst:296 msgid "Normalmap" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:301 +#: ../../docs/tutorials/3d/spatial_material.rst:298 msgid "" "Normal mapping allows to set a texture that represents finer shape detail. " "This does not modify geometry, just the incident angle for light. In Godot, " @@ -20060,11 +20241,11 @@ msgid "" "compatibility." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:308 +#: ../../docs/tutorials/3d/spatial_material.rst:305 msgid "Rim" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:310 +#: ../../docs/tutorials/3d/spatial_material.rst:307 msgid "" "Some fabrics have small micro fur that causes light to scatter around it. " "Godot emulates this with the *rim* parameter. Unlike other rim lighting " @@ -20073,7 +20254,7 @@ msgid "" "considerably more believable." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:317 +#: ../../docs/tutorials/3d/spatial_material.rst:314 msgid "" "Rim size depends on roughness, and there is a special parameter to specify " "how it must be colored. If *tint* is 0, the color of the light is used for " @@ -20081,22 +20262,22 @@ msgid "" "intermediate values generally works best." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:322 +#: ../../docs/tutorials/3d/spatial_material.rst:319 msgid "Clearcoat" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:324 +#: ../../docs/tutorials/3d/spatial_material.rst:321 msgid "" "The *clearcoat* parameter is used mostly to add a *secondary* pass of " "transparent coat to the material. This is common in car paint and toys. In " "practice, it's a smaller specular blob added on top of the existing material." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:329 +#: ../../docs/tutorials/3d/spatial_material.rst:326 msgid "Anisotropy" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:331 +#: ../../docs/tutorials/3d/spatial_material.rst:328 msgid "" "Changes the shape of the specular blow and aligns it to tangent space. " "Anisotropy is commonly used with hair, or to make materials such as brushed " @@ -20104,11 +20285,11 @@ msgid "" "flowmaps." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:339 +#: ../../docs/tutorials/3d/spatial_material.rst:336 msgid "Ambient Occlusion" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:341 +#: ../../docs/tutorials/3d/spatial_material.rst:338 msgid "" "In Godot's new PBR workflow, it is possible to specify a pre-baked ambient " "occlusion map. This map affects how much ambient light reaches each surface " @@ -20118,79 +20299,79 @@ msgid "" "possible." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:349 +#: ../../docs/tutorials/3d/spatial_material.rst:346 msgid "Depth" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:351 +#: ../../docs/tutorials/3d/spatial_material.rst:348 msgid "" "Setting a depth map to a material produces a ray-marched search to emulate " "the proper displacement of cavities along the view direction. This is not " "real added geometry, but an illusion of depth. It may not work for complex " -"objets, but it produces a realistic depth effect for textues. For best " +"objects, but it produces a realistic depth effect for textures. For best " "results, *Depth* should be used together with normal mapping." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:359 +#: ../../docs/tutorials/3d/spatial_material.rst:356 msgid "Subsurface Scattering" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:361 +#: ../../docs/tutorials/3d/spatial_material.rst:358 msgid "" "This effect emulates light that goes beneath an object's surface, is " "scattered, and then comes out. It's useful to make realistic skin, marble, " "colored liquids, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:368 +#: ../../docs/tutorials/3d/spatial_material.rst:365 msgid "Transmission" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:370 +#: ../../docs/tutorials/3d/spatial_material.rst:367 msgid "" "Controls how much light from the lit side (visible to light) is transferred " "to the dark side (opposite side to light). This works well for thin objects " "such as tree/plant leaves, grass, human ears, etc." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:377 +#: ../../docs/tutorials/3d/spatial_material.rst:374 msgid "Refraction" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:379 +#: ../../docs/tutorials/3d/spatial_material.rst:376 msgid "" "When refraction is enabled, it supersedes alpha blending, and Godot attempts " "to fetch information from behind the object being rendered instead. This " "allows distorting the transparency in a way similar to refraction." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:386 +#: ../../docs/tutorials/3d/spatial_material.rst:383 msgid "Detail" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:388 +#: ../../docs/tutorials/3d/spatial_material.rst:385 msgid "" "Godot allows using secondary albedo and normal maps to generate a detail " "texture, which can be blended in many ways. Combining with secondary UV or " "triplanar modes, many interesting textures can be achieved." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:395 +#: ../../docs/tutorials/3d/spatial_material.rst:392 msgid "UV1 and UV2" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:397 +#: ../../docs/tutorials/3d/spatial_material.rst:394 msgid "" "Godot supports 2 UV channels per material. Secondary UV is often useful for " "AO or Emission (baked light). UVs can be scaled and offseted which is useful " "in textures with repeat." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:401 +#: ../../docs/tutorials/3d/spatial_material.rst:398 msgid "Triplanar Mapping" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:403 +#: ../../docs/tutorials/3d/spatial_material.rst:400 msgid "" "Triplanar mapping is supported for both UV1 and UV2. This is an alternative " "way to obtain texture coordinates, often called \"Autotexture\". Textures " @@ -20198,17 +20379,17 @@ msgid "" "worldspace or object space." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:408 +#: ../../docs/tutorials/3d/spatial_material.rst:405 msgid "" "In the image below, you can see how all primitives share the same material " "with world triplanar, so bricks continue smoothly between them." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:414 +#: ../../docs/tutorials/3d/spatial_material.rst:411 msgid "Proximity and Distance Fade" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:416 +#: ../../docs/tutorials/3d/spatial_material.rst:413 msgid "" "Godot allows materials to fade by proximity to each other as well as " "depending on the distance to the viewer. Proximity fade is useful for " @@ -20217,17 +20398,17 @@ msgid "" "only present after a given distance." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:420 +#: ../../docs/tutorials/3d/spatial_material.rst:417 msgid "" "Keep in mind enabling these enables alpha blending, so abusing them for a " "whole scene is not generally a good idea." msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:425 +#: ../../docs/tutorials/3d/spatial_material.rst:422 msgid "Render Priority" msgstr "" -#: ../../docs/tutorials/3d/spatial_material.rst:427 +#: ../../docs/tutorials/3d/spatial_material.rst:424 msgid "" "Rendering order can be changed for objects although this is mostly useful " "for transparent objects (or opaque objects that do depth draw but no color " @@ -20370,7 +20551,7 @@ msgstr "" #: ../../docs/tutorials/3d/lights_and_shadows.rst:63 msgid "" "Any sort of bias issues can always be fixed by increasing the shadow map " -"resolution, although that may lead to decreased peformance on low-end " +"resolution, although that may lead to decreased performance on low-end " "hardware." msgstr "" @@ -21663,7 +21844,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:156 msgid "" "Even though, in most cases, lighting and texturing are heavily artist " -"controlled, Godot suports a simple high dynamic range implementation with " +"controlled, Godot supports a simple high dynamic range implementation with " "the auto exposure mechanism. This is generally used for the sake of realism " "when combining interior areas with low light and outdoors. Auto exposure " "simulates the camera (or eye) in an effort to adapt between light and dark " @@ -21771,7 +21952,7 @@ msgstr "" #: ../../docs/tutorials/3d/environment_and_post_processing.rst:212 msgid "" -"**Depth Tolerance** can be used for scren-space-ray hit tolerance to gaps. " +"**Depth Tolerance** can be used for screen-space-ray hit tolerance to gaps. " "The bigger the value, the more gaps will be ignored." msgstr "" @@ -23034,303 +23215,435 @@ msgid "" "Then modify the ``_ready()`` function to look like this:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:4 -msgid "Mesh generation with heightmap and shaders" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:4 +msgid "Vertex displacement with shaders" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:9 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:9 msgid "" -"This tutorial will help you to use Godot shaders to deform a plane mesh so " -"that it appears like a basic terrain. Remember that this solution has pros " -"and cons." +"This tutorial will teach you how to displace the vertices of a :ref:`Plane " +"Mesh` inside a shader. Vertex displacement can be used for " +"a wide variety of effects, but most commonly it is used as a quick way to " +"turn a flat plane into a simple terrain. Typically this is done using a " +"heightmap, but in order to keep everything self contained, in this tutorial " +"we will use noise in a shader. At the end of this tutorial we will have a " +"deformed plane that looks like a miniature terrain complete with dynamic " +"lighting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:13 -msgid "Pros:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:18 +msgid "By reading this tutorial you should gain a basic understanding of:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:15 -msgid "Pretty easy to do." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:20 +msgid "How to create and subdivide a :ref:`Plane Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:16 -msgid "This approach allows computation of LOD terrains." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:17 -msgid "The heightmap can be used in Godot to create a normal map." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:19 -msgid "Cons:" -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:21 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:21 msgid "" -"The Vertex Shader can't re-compute normals of the faces. Thus, if your mesh " -"is not static, this method will **not** work with shaded materials." +"How to create and assign a material to a :ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:24 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:22 msgid "" -"This tutorial uses a plane mesh imported from Blender to Godot Engine. Godot " -"is able to create meshes as well." +"How to write a :ref:`Shader` that displaces the vertices of a :" +"ref:`Mesh`" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:27 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:23 msgid "" -"See this tutorial as an introduction, not a method that you should employ in " -"your games, except if you intend to do LOD. Otherwise, this is probably not " -"the best way." +"How to pass values (Uniforms) into a :ref:`Shader` to update " +"the :ref:`Mesh` in realtime" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:31 -msgid "" -"However, let's first create a heightmap, or a 2D representation of the " -"terrain. To do this, I'll use GIMP, but you can use any image editor you " -"like." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:24 +msgid "How to approximate normals from a height function" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:35 -msgid "The heightmap" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:25 +msgid "How to use a light with a custom material" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:37 -msgid "" -"We will use a few functions of GIMP image editor to produce a simple " -"heightmap. Start GIMP and create a square image of 512x512 pixels." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:42 -msgid "You are now in front of a new, blank, square image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:46 -msgid "Then, use a filter to render some clouds on this new image." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:50 -msgid "" -"Parameter this filter to whatever you want. A white pixel corresponds to the " -"highest point of the heightmap, a black pixel corresponds to the lowest one. " -"So, darker regions are valleys and brighter are mountains. If you want, you " -"can check \"tileable\" to render a heightmap that can be cloned and tiled " -"close together with another one. X and Y size don't matter a lot as long as " -"they are big enough to provide a decent ground. A value of 4.0 or 5.0 for " -"both is nice. Click on the \"New Seed\" button to roll a dice and GIMP will " -"create a new random heightmap. Once you are happy with the result, click \"OK" -"\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:62 -msgid "" -"You can continue to edit your image if you wish. For our example, let's keep " -"the heightmap as is, and let's export it to a PNG file, say \"heightmap.png" -"\". Save it in your Godot project folder." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:67 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:28 msgid "The plane mesh" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:69 -msgid "Now, we will need a plane mesh to import in Godot. Let's run Blender." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:73 -msgid "Remove the start cube mesh, then add a new plane to the scene." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:77 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:30 msgid "" -"Zoom a bit, then switch to Edit mode (Tab key) and in the Tools buttongroup " -"at the left, hit \"Subdivide\" 5 or 6 times." +"First, add a :ref:`Spatial` node to the scene to act as the " +"root. Next, add a :ref:`MeshInstance` as a child." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:82 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:35 msgid "" -"Your mesh is now subdivided, which means we added vertices to the plane mesh " -"that we will later be able to move. Job's not finished yet: in order to " -"texture this mesh a proper UV map is necessary. Currently, the default UV " -"map contains only the 4 corner vertices we had at the beginning. However, we " -"now have more, and we want to be able to texture over the whole mesh " -"correctly." +"Select the newly created :ref:`MeshInstance`. Then click " +"on the button that says \"null\" next to the :ref:`Mesh` " +"in the Inspector. This will bring up a list of :ref:" +"`PrimitiveMeshes`. Select \"New PlaneMesh\"." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:89 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:41 msgid "" -"If all the vertices of your mesh are not selected, select them all (hit \"A" -"\"). They must appear orange, not black. Then, in the Shading/UVs button " -"group to the left, click the \"Unwrap\" button (or simply hit \"U\") and " -"select \"Smart UV Project\". Keep the default options and hit \"Ok\"." +"The button will change into a small image of a plane. Click on it to enter " +"into the Inspector for the :ref:`Plane Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:97 -msgid "Now, we need to switch our view to \"UV/Image editor\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:101 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:44 msgid "" -"Select all the vertices again (\"A\") then in the UV menu, select \"Export " -"UV Layout\"." +"Then, in the viewport, click in the upper left corner where it says " +"[Perspective]. A menu will appear. In the middle of the menu are options for " +"how to display the scene. Select 'Display Wireframe'." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:106 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:50 +msgid "This will allow you to see the triangles making up the plane." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:54 +msgid "Now set the ``Subdivide Width`` and ``Subdivide Height`` to ``32``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:58 msgid "" -"Export the layout as a PNG file. Name it \"plane.png\" and save it in your " -"Godot project folder. Now, let's export our mesh as an OBJ file. Top of the " -"screen, click \"File/Export/Wavefront (obj)\". Save your object as \"plane." -"obj\" in your Godot project folder." +"You can see that there are now way more triangles in the :ref:" +"`Mesh`. This will give us more vertices to work with and " +"thus allow us to add more detail." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:112 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:65 msgid "Shader magic" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:114 -msgid "Let's now open Godot Editor." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:116 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:67 msgid "" -"Create a new project in the folder you previously created and name it what " -"you want." +"Now that we have a :ref:`Plane Mesh` to draw lets setup " +"the material that will deform the :ref:`Mesh`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:121 -msgid "In our default scene (3D), create a root node \"Spatial\"." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:123 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:69 msgid "" -"Create a MeshInstance node as a child of the node we just created. Then, " -"load the Mesh selecting \"Load\" and then our \"plane.obj\" file." +"Click beside material in the :ref:`Plane Mesh` Menu and " +"create a new :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:128 -msgid "Great! Our plane is now rendered in the 3D view." +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:73 +msgid "Then click on the created :ref:`ShaderMaterial`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:132 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:75 msgid "" -"It is time to add some shader stuff. In the Inspector, in the \"Material\" " -"line, add a \"New ShaderMaterial\". Edit it by clicking it and then " -"selecting the \"Edit\" option." +"Then click beside 'shader' and create a new :ref:`Shader`." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:138 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:79 msgid "" -"We need now to create the actual shader. On the Inspector, select the " -"\"Shader\" line and click on \"New Shader\"." +"Click into the newly created :ref:`Shader`. You should now see " +"Godot's Shader editor." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:143 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:83 msgid "" -"Edit it by clicking the \"Edit\" option just like we did before. The Shader " -"editor opens." +"Notice how it is throwing an error? This is because the shader editor " +"reloads shaders on the fly automatically. The first thing Godot shaders need " +"is a declaration of what type of shader they are. Accordingly, we set the " +"variable ``shader_type`` to ``spatial``. One more thing we will add is the " +"``render_mode``, we will set it to ``unshaded``. This means that Godot won't " +"run the light shader on this object." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:148 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:94 msgid "" -"Let's start writing our shader. If you don't know how to use shaders in " -"Godot you can check the :ref:`doc_shading_language` page." +"This should remove the errors and your :ref:`Mesh` " +"should turn white. If you were to comment out the ``render_mode`` the plane " +"would appear blue because it would pick up the sky colors." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:151 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:97 msgid "" -"Let's start with the Fragment part. This one is used to texture the plane " -"using an image. For this example, we will texture it with the heightmap " -"image itself, so we'll actually see mountains as brighter regions and " -"canyons as darker regions. Use this code:" +"Next we will define a vertex shader. The vertex shader determines where the " +"vertices of your :ref:`Mesh` appear in the final scene. " +"We will be using it to offset the height of each vertex and make our flat " +"plane appear like a little terrain." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:168 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:101 +msgid "We define the vertex shader like so:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:109 msgid "" -"First, we set the shader type as ``spatial`` (for 3D). The ``render_mode " -"unshaded`` line makes our MeshInstance be unaffected by the lighting in our " -"world. It doesn't matter since it is a greyscale image. We take a parameter " -"(``uniform``) as a ``sampler2D``, which will be the texture of our heightmap." +"With nothing in the ``vertex`` function Godot will use its default vertex " +"shader. We can easily start to make changes by adding a single line:" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:174 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:118 +msgid "Adding this line you should get an image like the one below." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:122 msgid "" -"Then, we set the color of every pixel of the image given by " -"``texture(source, UV).rgb`` setting it to the ALBEDO variable. Remember that " -"the ``UV`` variable is a shader variable that returns the 2D position of the " -"pixel in the texture image, according to the vertex we are currently dealing " -"with. That is the use of the UV Layout we made before." +"Okay, lets unpack this. The ``y`` value of the ``VERTEX`` is being " +"increased. And we are passing the ``x`` and ``z`` components of the " +"``VERTEX`` as arguments to ``cos`` and ``sin`` this gives us a wave like " +"appearance across the ``x`` and ``z`` axis." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:181 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:126 msgid "" -"However, the plane is displayed white! This is because we didn't set the " -"texture file and the color to use." +"What we want to achieve is the look of little hills, after all ``cos`` and " +"``sin`` already look kind of like hills. We do so by scaling the inputs to " +"the ``cos`` and ``sin`` functions." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:186 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:137 msgid "" -"In the Inspector, click the back arrow to get back to the ShaderMaterial. " -"This is where you want to set the texture and the color. Click the \"Shader " -"Param\" line, in \"Source\", click \"Load\" and select the texture file " -"\"heightmap.png\". Now you will see our heightmap." +"This looks better, but it is still too spiky. This is because ``cos`` and " +"``sin`` output values between ``-1`` and ``1``, so the range of the output " +"is much too high. We correct this by multiplying the result by ``0.5`` to " +"reduce the size." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:194 -msgid "Good. Now, the Vertex part." -msgstr "" - -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:196 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:148 msgid "" -"The Vertex Shader is the first shader to be executed by the pipeline. It " -"deals with vertices." +"Looks much more hilly now. But ``cos`` and ``sin`` are boring. Lets move " +"onto something more interesting." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:199 -msgid "" -"Insert a new \"uniform\" variable right after the one that we introduced " -"before:" +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:151 +msgid "Noise" msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:206 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:153 msgid "" -"The ``height_range`` parameter is a parameter that we will use to increase " -"the height effect." +"Noise is a very popular tool for procedural generation. Think of it as " +"similar to the cosine function where you have repeating hills except with " +"noise each hill has a different height. Understanding noise is not necessary " +"for this tutorial. There is nothing wrong with simply copying and pasting " +"the code below." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:209 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:158 msgid "" -"Then, insert the following function before the fragment function we wrote " -"before." +"The first function we use to generate the noise is the ``hash`` function. It " +"gives the random height for each of the hill tops." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:220 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:167 msgid "" -"First, we save the x and z position of the VERTEX, because we do not want " -"them to change: the plane must remain square. Remember that Y axis " -"corresponds to the \"altitude\", which is the only one we want to change " -"with the heightmap." +"You will find similar functions to this all over the internet. It is " +"lovingly referred to as the 'one-liner hash function'. It works well for " +"simple noise, but there are many better alternatives floating around as " +"well. For this tutorial it will work fine." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:225 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:171 msgid "" -"Then, we compute an ``h`` variable by multiplying the pixel value at the UV " -"position and the ``height_range``. As the heightmap is a greyscale image, " -"all r, g and b channels contain the same value. We use ``g``, but any of r, " -"g and b have the same effect." +"Next we define the ``noise`` function. It smoothly interpolates between the " +"random heights. Again, if this code seems daunting, do not worry, just copy " +"paste and move on with the tutorial." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:230 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:185 msgid "" -"After that, we set the current vertex' position at (xz.x, h, xz.y) position. " -"Concerning xz.y remember that its type is \"vec2\". Thus, its components are " -"x and y." +"Lastly, to add detail we combine successive layers of noise using something " +"called fractal brownian motion or FBM. Scary name aside FBM noise just adds " +"together layers of noise with increase frequency and decreasing amplitude. " +"To implement it we run over a for loop where we increase the frequency each " +"level, decrease the amplitude, and calculate a new layer of noise." msgstr "" -#: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:234 +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:204 msgid "" -"That's all good, but our plane remains flat. This is because the " -"``height_range`` value is 0. Increase this value to observe the mesh distort " -"and take to form of the terrain we set before:" +"We can now use this noise function in place of ``cos`` and ``sin`` in the " +"previous section." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:213 +msgid "" +"With the noise function in place we already have something that looks kind " +"of cool. There is a lot of detail, it kind of looks hilly or mountainous." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:217 +msgid "Fragment Shader" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:219 +msgid "" +"The difference between a vertex shader and a fragment shader is that the " +"vertex shader runs per vertex and sets properties such as ``VERTEX`` " +"(position) and ``NORMAL``, while the fragment shader runs per pixel and, " +"most importantly, sets the ``ALBEDO`` color of the :ref:" +"`Mesh`." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:223 +msgid "" +"Now lets look at the :ref:`Mesh` with a regular shader " +"instead of the wireframe. Set the viewport back to 'Display Normal'." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:228 +msgid "" +"The :ref:`Mesh` appears completely white because the " +"fragment shader is coloring each pixel white, but if every pixel is white we " +"lose detail on the :ref:`Mesh`. So lets color each pixel " +"based on the height calculated in the vertex shader. We do so by setting the " +"``COLOR`` variable in the vertex shader. And by setting the ``ALBEDO`` in " +"the fragment shader to the calculated ``COLOR`` variable." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:245 +msgid "" +"With this change we can see the detail of the :ref:" +"`Mesh`, even without displaying the :ref:" +"`Mesh`'s wireframe." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:250 +#: ../../docs/tutorials/shading/shading_language.rst:394 +msgid "Uniforms" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:252 +msgid "" +"Uniform variables allow you to pass data from the game into the shader. They " +"can be very useful for controlling shader effects. Uniforms can be almost " +"any datatype that can be used in the shader. To use a uniform you declare it " +"in your :ref:`Shader` using the keyword ``uniform``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:257 +msgid "Lets make a uniform that changes the height of the terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:264 +msgid "" +"Godot lets you initialize a uniform with a value, here ``height_scale`` is " +"set to ``0.5``. You can set uniforms from gdscript by calling the function " +"``set_shader_param`` on the material corresponding to the shader. The value " +"passed from gdscript takes precedence over the value used to initialize it " +"in the shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:273 +msgid "" +"Remember that the string passed into ``set_shader_param`` must match the " +"name of the uniform variable in the :ref:`Shader`. You can use " +"the uniform variable anywhere inside your :ref:`Shader`. Here, " +"we will use it to set the height value instead of arbitrarily multiplying by " +"``0.5``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:282 +msgid "" +"The terrain should look exactly the same, but now we have control over the " +"height easily. Here is the same terrain with ``height_scale`` set to ``1``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:287 +msgid "And here it is with ``height_scale`` set to ``0.2``:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:291 +msgid "" +"Using uniforms we can even change the value every frame to animate the " +"height of the terrain. Combined with :ref:`Tweens` this can be " +"especially useful for simple animations." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:295 +msgid "Interacting with light" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:297 +msgid "" +"As a final part of this tutorial lets try to set up the terrain to interact " +"with light. First, we will add an :ref:`OmniLight` to the " +"scene." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:303 +msgid "" +"You should notice that nothing changes, this is because we set the " +"``render_mode`` to ``unshaded`` at the beginning of this tutorial, lets " +"remove that." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:313 +msgid "" +"It looks slightly better now, you can see the light affecting the terrain, " +"and it has turned blue as a result of the sky. The problem is the light is " +"affecting the terrain as if it were a flat plane. This is because the light " +"shader uses the normals of the :ref:`Mesh` to calculate " +"light. The normals are stored in the :ref:`Mesh`, but we " +"are changing the shape of the :ref:`Mesh` in the shader " +"so the normals are no longer correct. To fix this we need to recalculate the " +"normals in the shader. Godot makes this easy for us, all we have to do is " +"calculate the new normal and set ``NORMAL`` to that value in the vertex " +"shader. With ``NORMAL`` set Godot will do all the difficult lighting " +"calculations for us." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:322 +msgid "" +"To calculate the normal from noise we are going to use a technique called " +"'central differences'. This is used a lot, especially in places like " +"shadertoy, to calculate normals in shaders. What we will do is calculate the " +"noise at four points surrounding the vertex in the ``x`` and ``z`` " +"directions and then calculate the slope at the vertex from that. After all a " +"normal is just an indicator of the slope of the noise." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:328 +msgid "We calculate the normal with one line in the vertex shader." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:336 +msgid "" +"The variable ``e`` just makes it easier to add and subtract the right value " +"from the ``VERTEX``. Setting ``e`` to a lower number will increase the level " +"of detail of the normal." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:339 +msgid "With ``NORMAL`` calculated the terrain now looks like:" +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:343 +msgid "" +"This still does not look how we want it to. The issue here is that the noise " +"changes faster than the vertices do. So when we calculate the normal at the " +"point of the ``VERTEX`` it does not align with what we see in the final :ref:" +"`Mesh`. In order to fix this we add more vertices. The " +"below image is made with a :ref:`Mesh` with " +"``subdivision`` set to ``100``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:351 +msgid "" +"Now we can drag the light around and the lighting will update automatically." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:357 +msgid "" +"If you zoom the camera out you can see that the :ref:" +"`Mesh` now looks like a small terrain." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:361 +msgid "" +"That is everything for this tutorial. Hopefully you understand the basics of " +"vertex shaders in Godot. As a further exercise try changing the " +"``height_scale`` from gdscript, try using different :ref:`Primitive " +"Meshes`, and try making your own functions to calculate " +"``height``." +msgstr "" + +#: ../../docs/tutorials/3d/vertex_displacement_with_shaders.rst:366 +msgid "" +"For further information on how to use shaders in Godot you should check out " +"the :ref:`doc_shading_language` page." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 @@ -23342,6 +23655,7 @@ msgid "Part 1" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:7 msgid "Tutorial introduction" msgstr "" @@ -23488,6 +23802,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1010 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:45 msgid "" "Feel free to use these assets however you want! All original assets belong " "to the Godot community, with the other assets belonging to those listed " @@ -23502,6 +23817,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1015 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:49 msgid "" "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open " "Font License, Version 1.1``." @@ -23537,14 +23853,17 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:63 msgid "Getting everything ready" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:79 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:65 msgid "Launch Godot and open up the project included in the starter assets." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:81 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:67 msgid "" "While these assets are not necessarily required to use the scripts provided " "in this tutorial, they will make the tutorial much easier to follow as there " @@ -23823,7 +24142,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:309 msgid "" -"``process_movement`` is where we'll send all of the date necessary to the :" +"``process_movement`` is where we'll send all of the data necessary to the :" "ref:`KinematicBody ` so it can move through the game " "world." msgstr "" @@ -23962,8 +24281,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 msgid "" -"To use the a :ref:`Spatial ` node's local directional " -"vectors, we use this code:" +"To use the :ref:`Spatial ` node's local directional vectors, " +"we use this code:" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 @@ -24344,11 +24663,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1245 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1247 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:666 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:724 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:779 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:952 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:977 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1426 msgid "Final notes" msgstr "" @@ -24378,11 +24698,12 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:641 -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:681 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:788 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:961 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:985 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1432 msgid "If you ever get lost, be sure to read over the code again!" msgstr "" @@ -24492,9 +24813,9 @@ msgstr "" msgid "" "``states`` is a dictionary with the key being the name of the current state, " "and the value being an array holding all of the animations (states) we can " -"transition to. For example, if we are in currently in state " -"``Idle_unarmed``, we can only transition to ``Knife_equip``, " -"``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." +"transition to. For example, if we are currently in the ``Idle_unarmed`` " +"state, we can only transition to ``Knife_equip``, ``Pistol_equip``, " +"``Rifle_equip``, and ``Idle_unarmed``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:172 @@ -24580,7 +24901,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:209 msgid "" -"``set_animation`` changes the animation to the the animation named " +"``set_animation`` changes the animation to the animation named " "``animation_name`` *if* we can transition to it. In other words, if the " "animation state we are currently in has the passed in animation state name " "in ``states``, then we will change to that animation." @@ -24588,7 +24909,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:213 msgid "" -"To start we check if the passed in animation name is the same as name as the " +"To start we check if the passed in animation name is the same name as the " "animation currently playing. If they are the same, then we write a warning " "to the console and return ``true``." msgstr "" @@ -24624,8 +24945,8 @@ msgid "" "If you put in a value of ``1``, for one second the new animation will play " "with increasing strength, blending the two animations together for one " "second before playing only the new animation. This leads to a smooth " -"transition between animations, which is looks great when you are changing " -"from a walking animation to a running animation." +"transition between animations, which looks great when you are changing from " +"a walking animation to a running animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:231 @@ -24655,7 +24976,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:243 msgid "" "``animation_ended`` is the function that will be called by :ref:" -"`AnimationPlayer ` when it's done playing a animation." +"`AnimationPlayer ` when it's done playing an " +"animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:246 @@ -24691,7 +25013,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:263 msgid "" -"Try running ``Testing_Area.tscn`` to make sure there is no runtime issues. " +"Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. " "If the game runs but nothing seems to have changed, then everything is " "working correctly." msgstr "" @@ -24768,7 +25090,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:305 msgid "" "For finer control when scrubbing the timeline, press ``control`` and scroll " -"forwards with the mouse wheel to zoom in. Scrolling backwards will zoom out." +"forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 @@ -24794,10 +25116,10 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:321 msgid "" -"Once you've click that, a new window will open on the right side. Now click " -"the green point on the ``AnimationPlayer`` track. This will bring up the " -"information associated with that point in the timeline. In the empty name " -"field, enter ``animation_callback`` and press ``enter``." +"Once you've clicked that, a new window will open on the right side. Now " +"click the green point on the ``AnimationPlayer`` track. This will bring up " +"the information associated with that point in the timeline. In the empty " +"name field, enter ``animation_callback`` and press ``enter``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:325 @@ -24820,8 +25142,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:334 msgid "" "Because the process is exactly the same as the pistol, the process is going " -"to explained in a little less depth. Follow the steps in the above if you " -"get lost! It is exactly the same, just on a different animation." +"to explained in a little less depth. Follow the steps from above if you get " +"lost! It is exactly the same, just on a different animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 @@ -24867,7 +25189,7 @@ msgid "" "window. Select the newly created function callback point, put " "\"animation_callback\" into the name field and press ``enter``. Click the " "\"enable editing of individual keys\" button again to turn off individual " -"key editing. so we cannot change one of the transform tracks by accident." +"key editing, so we cannot change one of the transform tracks by accident." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:360 @@ -24895,9 +25217,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:373 msgid "" "One of the two ways is using a bullet object. This will be an object that " -"travels through the world and handles its own collision code. This method we " -"create/spawn a bullet object in the direction our gun is facing, and then it " -"sends itself forward." +"travels through the world and handles its own collision code. In this method " +"we create/spawn a bullet object in the direction our gun is facing, and then " +"it travels forward." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 @@ -24912,15 +25234,15 @@ msgstr "" msgid "" "Another advantage is we can have more complex bullet movement. If we want to " "make the bullet fall ever so slightly as time goes on, we can make the " -"bullet controlling script slowly push the bullet towards the ground. Using a " -"object also makes the bullet take time to reach its target, it doesn't " +"bullet controlling script slowly push the bullet towards the ground. Using " +"an object also makes the bullet take time to reach its target, it doesn't " "instantly hit whatever its pointed at. This feels more realistic because " "nothing in real life moves instantly from one point to another." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:384 msgid "" -"One of the huge disadvantages performance. While having each bullet " +"One of the huge disadvantages is performance. While having each bullet " "calculate their own paths and handle their own collision allows for a lot of " "flexibility, it comes at the cost of performance. With this method we are " "calculating every bullet's movement every step, and while this may not be a " @@ -24933,7 +25255,7 @@ msgid "" "Despite the performance hit, many first person shooters include some form of " "object bullets. Rocket launchers are a prime example because in many first " "person shooters, rockets do not just instantly explode at their target " -"position. You can also find bullets as object many times with grenades " +"position. You can also find bullets as objects many times with grenades " "because they generally bounce around the world before exploding." msgstr "" @@ -24970,7 +25292,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 msgid "" "Another disadvantage with bullet objects is networking. Bullet objects have " -"to sync the positions (at least) with however many clients are connected to " +"to sync the positions (at least) with all the clients that are connected to " "the server." msgstr "" @@ -24991,7 +25313,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:410 msgid "" "This method is extremely common in guns that have fast moving bullets that " -"rarely change trajectory change over time." +"rarely change trajectory over time." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:412 @@ -25034,9 +25356,9 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 msgid "" -"One huge advantage for this method is it's light on performance. Sending a " -"couple hundred rays through space is *way* easier for the computer to " -"calculate than sending a couple hundred bullet objects." +"One huge advantage for this method is that it's light on performance. " +"Sending a couple hundred rays through space is *way* easier for the computer " +"to calculate than sending a couple hundred bullet objects." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 @@ -25074,92 +25396,92 @@ msgid "" "the \"Pistol_fire\" animation callback function is called." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:443 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:444 msgid "" "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial " "` node called bullet, with a :ref:`MeshInstance " "` and an :ref:`Area ` with a :ref:" -"`CollisionShape ` childed to it." +"`CollisionShape ` children to it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:446 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 msgid "" "Create a new script called ``Bullet_script.gd`` and attach it to the " "``Bullet`` :ref:`Spatial `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:448 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 msgid "" "We are going to move the entire bullet object at the root (``Bullet``). We " "will be using the :ref:`Area ` to check whether or not we've " "collided with something" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:450 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:452 msgid "" "Why are we using a :ref:`Area ` and not a :ref:`RigidBody " -"`? The mean reason we're not using a :ref:`RigidBody " +"`? The main reason we're not using a :ref:`RigidBody " "` is because we do not want the bullet to interact with " "other :ref:`RigidBody ` nodes. By using an :ref:`Area " "` we are assuring that none of the other :ref:`RigidBody " "` nodes, including other bullets, will be effected." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:454 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 msgid "" "Another reason is simply because it is easier to detect collisions with a :" "ref:`Area `!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:456 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:458 msgid "Here's the script that will control our bullet:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:494 msgid "Lets go through the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:496 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 msgid "First we define a few class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:498 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 msgid "``BULLET_SPEED``: The speed the bullet travels at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 msgid "" "``BULLET_DAMAGE``: The damage the bullet will cause to whatever it collides " "with." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:500 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:501 -msgid "``timer``: A float for tracking how long we've been alive." +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:503 +msgid "``timer``: A float for tracking how long the bullet has been alive." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:502 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 msgid "" "``hit_something``: A boolean for tracking whether or not we've hit something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:506 msgid "" "With the exception of ``timer`` and ``hit_something``, all of these " "variables change how the bullet interacts with the world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 msgid "" "The reason we are using a kill timer is so we do not have a case where we " "get a bullet travelling forever. By using a kill timer, we can assure that " "no bullets will travel forever and consume resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:511 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:513 msgid "" "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class " "variables. The reason behind this is the same as the reason given in :ref:" @@ -25169,37 +25491,37 @@ msgid "" "variables and not constants." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:518 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:520 msgid "" "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that " "it calls the ``collided`` function when a body enters the area." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:523 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:525 msgid "" "``_physics_process`` gets the bullet's local ``Z`` axis. If you look in at " "the scene in local mode, you will find that the bullet faces the positive " "local ``Z`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:526 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 msgid "" "Next we translate the entire bullet by that forward direction, multiplying " "in our speed and delta time." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:530 msgid "" "After that we add delta time to our timer and check if the timer has as long " "or longer than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` " -"to free ourselves." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:533 -msgid "In ``collided`` we check if we've hit something yet or not." +"to free the bullet." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:535 +msgid "In ``collided`` we check if we've hit something yet or not." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:537 msgid "" "Remember that ``collided`` is only called when a body has entered the :ref:" "`Area ` node. If the bullet has not already collided with " @@ -25209,32 +25531,32 @@ msgid "" "bullet's rotation and position." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:542 msgid "" "in ``collided``, the passed in body can be a :ref:`StaticBody " "`, :ref:`RigidBody `, or :ref:" "`KinematicBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:545 msgid "" "We set the Bullet's ``hit_something`` variable to ``true`` because " -"regardless of whether or not the body the bullet collided with has the " +"regardless of whether or not the body that the bullet collided with has the " "``bullet_hit`` function/method, it has hit something and so we need to make " "sure the bullet does not hit anything else." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 msgid "Then we free the bullet using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:550 msgid "" "You may be wondering why we even have a ``hit_something`` variable if we " "free the bullet using ``queue_free`` as soon as it hits something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:553 msgid "" "The reason we need to track whether we've hit something or not is because " "``queue_free`` does not immediately free the node, so the bullet could " @@ -25243,19 +25565,19 @@ msgid "" "hit one object." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 msgid "" "Before we start programming the player again, let's take a quick look at " "``Player.tscn``. Open up ``Player.tscn`` again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:562 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:564 msgid "" "Expand ``Rotation_Helper`` and notice how it has two nodes: " "``Gun_Fire_Points`` and ``Gun_Aim_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:567 msgid "" "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice " "how it is lined up with the center of the screen and pulled a distance " @@ -25263,26 +25585,26 @@ msgid "" "bullets will for sure collide with as it goes along." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:570 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:572 msgid "" "There is a invisible mesh instance for debugging purposes. The mesh is a " "small sphere that visually shows where the bullets will be aiming at." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:573 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:575 msgid "" "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial " "` nodes, one for each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:578 msgid "" "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` " "node. This is where we will be sending the raycasts for our rifle's bullets. " -"The length of the raycast will dictate how far our the bullets will travel." +"The length of the raycast will dictate how far our bullets will travel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:582 msgid "" "We are using a :ref:`Raycast ` node to handle the rifle's " "bullet because we want to fire lots of bullets quickly. If we use bullet " @@ -25290,7 +25612,7 @@ msgid "" "machines." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:584 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:586 msgid "" "If you are wondering where the positions of the points came from, they are " "the rough positions of the ends of each weapon. You can see this by going to " @@ -25299,7 +25621,7 @@ msgid "" "the end of each weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:590 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:592 msgid "" "Open up ``Knife_Point`` and you'll find a :ref:`Area ` node. We " "are using a :ref:`Area ` for the knife because we only care for " @@ -25308,20 +25630,20 @@ msgid "" "object that looks like a knife." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:597 msgid "" "Finally, we have ``Pistol_Point``. This is the point where we will be " "creating/instancing our bullet objects. We do not need any additional nodes " "here, as the bullet handles all of its own collision detection." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:599 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:601 msgid "" "Now that we've seen how we will handle our other weapons, and where we will " "spawn the bullets, let's start working on making them work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:602 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:604 msgid "" "You can also look at the HUD nodes if you want. There is nothing fancy there " "and other than using a single :ref:`Label `, we will not be " @@ -25330,66 +25652,66 @@ msgid "" "nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:608 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 msgid "Creating the first weapon" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:610 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 msgid "Lets write the code for each of our weapons, starting with the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:612 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 msgid "" "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called " "``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:614 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:616 msgid "Add the following code to ``Weapon_Pistol.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:667 msgid "Let's go over how the script works." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:669 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 msgid "First we define some class variables we'll need in the script:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 msgid "``DAMAGE``: The amount of damage a single bullet does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:672 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:674 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 msgid "" "``is_weapon_enabled``: A variable for checking whether this weapon is in use/" "enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 msgid "``bullet_scene``: The bullet scene we worked on earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:676 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 msgid "``player_node``: A variable to hold ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:678 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 msgid "" "The reason we define most of these variables is so we can use them in " "``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:682 msgid "" "All of the weapons we'll make will have all of these variables (minus " "``bullet_scene``) so we have a consistent interface to interact with in " @@ -25399,31 +25721,31 @@ msgid "" "to change much of the code in ``Player.gd`` and it will just work." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 msgid "" -"If we could write all of the code in ``Player.gd``, but then ``Player.gd`` " -"will get increasingly harder to manage as we add weapons. By using a modular " +"We could write all of the code in ``Player.gd``, but then ``Player.gd`` will " +"get increasingly harder to manage as we add weapons. By using a modular " "design with a consistent interface, we can keep ``Player.gd`` nice and neat, " "while also making it easier to add/remove/modify weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:690 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 msgid "In ``_ready`` we simply pass over it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 msgid "" -"There is one thing of note though, an assumption we're assuming we'll fill " -"in ``Player.gd``." +"There is one thing of note though, an assumption that we'll fill in ``Player." +"gd`` at some point." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 msgid "" "We are going to assume that ``Player.gd`` will pass themselves in before " "calling any of the functions in ``Weapon_Pistol.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:698 msgid "" "While this can lead to situations where the player does not pass themselves " "in (because we forget), we would have to have a long string of " @@ -25433,51 +25755,51 @@ msgid "" "to each weapon in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 msgid "Next let's look at ``fire_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 msgid "The first thing we do is instance the bullet scene we made earlier." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:706 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 msgid "" "By instancing the scene, we are creating a new node holding all of the " "node(s) in the scene we instanced, effectively cloning that scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "" -"Then we add ``clone`` to the first child node of the root of the scene we " -"are currently in. By doing this we're making it at a child of the root node " -"of the currently loaded scene." -msgstr "" - #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 msgid "" -"In other words, we are adding ``clone`` as a child of the first node " +"Then we add a ``clone`` to the first child node of the root of the scene we " +"are currently in. By doing this we're making it a child of the root node of " +"the currently loaded scene." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:712 +msgid "" +"In other words, we are adding a ``clone`` as a child of the first node " "(whatever is at the top of the scene tree) in the currently loaded/opened " "scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be " "adding our ``clone`` as a child of ``Testing_Area``, the root node in that " "scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:715 msgid "" "As mentioned later below in the section on adding sounds, this method makes " "a assumption. This will be explained later in the section on adding sounds " "in :ref:`doc_fps_tutorial_part_three`" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:716 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 msgid "" "Next we set the global transform of the clone to the ``Pistol_Aim_Point``'s " "global transform. The reason we do this is so the bullet is spawned at the " "end of the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:718 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:720 msgid "" "You can see that ``Pistol_Aim_Point`` is positioned right at the end of the " "pistol by clicking the :ref:`AnimationPlayer ` and " @@ -25485,23 +25807,23 @@ msgid "" "at the end of the pistol when it fires." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:721 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 msgid "" "Next we scale it up by a factor of ``4`` because the bullet scene is a " "little too small by default." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:723 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:725 msgid "" "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage " "a single pistol bullet does (``DAMAGE``)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 msgid "Now let's look at ``equip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 msgid "" "The first thing we do is check to see if the animation manager is in the " "pistol's idle animation. If we are in the pistol's idle animation, we set " @@ -25509,45 +25831,45 @@ msgid "" "successfully been equipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:733 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:735 msgid "" "Because we know our pistol's ``equip`` animation automatically transitions " "to the pistol's idle animation, if we are in the pistol's idle animation the " -"pistol most have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:736 -msgid "" -"We know these animations will transition because we wrote to the code to " -"make them transition in ``Animation_Manager.gd``" +"pistol must have finished playing the equip animation." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 msgid "" +"We know these animations will transition because we wrote the code to make " +"them transition in ``Animation_Manager.gd``" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:740 +msgid "" "Next we check to see if the player is in the ``Idle_unarmed`` animation " "state. Because all unequipping animations go to this state, and because any " "weapon can be equipped from this state, we change animations to " "``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:743 msgid "" "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not " "need to do any more additional processing for equipping weapons, but since " "we were not able to equip the pistol yet, we return ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 msgid "Finally, let's look at ``unequip_weapon``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 msgid "" "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're " "checking things in reverse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:750 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:752 msgid "" "First we check to see if the player is in the idle animation state. Then we " "check to make sure the player is not in the ``Pistol_unequip`` animation. If " @@ -25555,7 +25877,7 @@ msgid "" "``pistol_unequip`` animation." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:753 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:755 msgid "" "You may be wondering why we are checking to see if the player is in the " "pistol's idle animation, and then making sure the player is not unequipping " @@ -25565,51 +25887,51 @@ msgid "" "unequip animation plays." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:757 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:759 msgid "" "Next we check to see if the player is in ``Idle_unarmed``, which is the " "animation state we will transition into from ``Pistol_unequip``. If the " -"player is are, then we set ``is_weapon_enabled`` to ``false`` since we are " -"no longer using this weapon, and return ``true`` because we have " -"successfully unequipped the pistol." +"player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to " +"``false`` since we are no longer using this weapon, and return ``true`` " +"because we have successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:760 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:762 msgid "" "If the player is not in ``Idle_unarmed``, we return ``false`` because we " "have not yet successfully unequipped the pistol." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:763 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 msgid "Creating the other two weapons" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:765 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 msgid "" -"Now that we all of the code we'll need for the pistol, let's add the code " -"for the rifle and knife next." +"Now that we have all of the code we'll need for the pistol, let's add the " +"code for the rifle and knife next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:767 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:769 msgid "" "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called " "``Weapon_Rifle.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 msgid "" "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only " "going to look at what's changed: ``fire_weapon``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 msgid "" "The first thing we do is get the :ref:`Raycast ` node, which " "is a child of ``Rifle_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:824 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:826 msgid "" "Next we force the :ref:`Raycast ` to update using " "``force_raycast_update``. This will force the :ref:`Raycast ` " @@ -25617,13 +25939,13 @@ msgid "" "collision check with the 3D physics world." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:827 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 msgid "" "Then we check to see if the :ref:`Raycast ` collided with " "something." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:829 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:831 msgid "" "If the :ref:`Raycast ` has collided with something, we first " "get the collision body it collided with. This can be a :ref:`StaticBody " @@ -25631,65 +25953,65 @@ msgid "" "`KinematicBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:832 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 msgid "" "Next we want to make sure the body we've collided with is not the player, " "since we (probably) do not want to give the player the ability to shoot " "themselves in the foot." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:834 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:836 msgid "" "If the body is not the player, we then check to see if they have a function/" "method called ``bullet_hit``. If they do, we call it and pass in the amount " "of damage this bullet does (``DAMAGE``), and the global transform of the :" -"ref:`Raycast ` so we can tell which direction the bullet came " -"from." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:839 -msgid "Now all we need to do is write the code for the knife." +"ref:`Raycast ` so we can tell from which direction the bullet " +"came." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:841 +msgid "Now all we need to do is write the code for the knife." +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:843 msgid "" "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> " "``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called " "``Weapon_Knife.gd``, then add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:892 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 msgid "" "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so " "let's look at that:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:894 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 msgid "" "The first thing we do is get the :ref:`Area ` child node of " "``Knife_Point``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:896 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:898 msgid "" "Next we want to get all of the collision bodies inside the :ref:`Area " "` using ``get_overlapping_bodies``. This will return a list of " "every body that touches the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:899 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 msgid "We next want to go through each of those bodies." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:901 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:903 msgid "" "First we check to make sure the body is not the player, because we do not " "want to let the player be able to stab themselves. If the body is the " -"player, we use ``continue`` so we jump to looking at the next body in " +"player, we use ``continue`` so we jump and look at the next body in " "``bodies``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:904 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:906 msgid "" "If we have not jumped to the next body, we then check to see if the body has " "the ``bullet_hit`` function/method. If it does, we call it, passing in the " @@ -25697,7 +26019,7 @@ msgid "" "transform of the :ref:`Area `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:907 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:909 msgid "" "While we could attempt to calculate a rough location for where the knife hit " "exactly, we are not going to because using the :ref:`Area `'s " @@ -25705,84 +26027,84 @@ msgid "" "position for each body is not worth the effort." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:912 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 msgid "Making the weapons work" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:914 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 msgid "Lets start making the weapons work in ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:916 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 msgid "" "First lets start by adding some class variables we'll need for the weapons:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:934 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 msgid "Lets go over what these new variables will do:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:936 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 msgid "" "``animation_manager``: This will hold the :ref:`AnimationPlayer " "` node and its script, which we wrote previously." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:937 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 msgid "" "``current_weapon_name``: The name of the weapon we are currently using. It " "has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:938 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 msgid "``weapons``: A dictionary that will hold all of the weapon nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:939 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 msgid "" "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a " "weapon's number to its name. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:940 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 msgid "" "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a " "weapon's name to its number. We'll use this for changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:941 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 msgid "" "``changing_weapon``: A boolean to track whether or not we are changing guns/" "weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:942 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 msgid "``changing_weapon_name``: The name of the weapon we want to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:943 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:945 msgid "" "``health``: How much health our player has. In this part of the tutorial we " "will not be using it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:944 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:946 msgid "" "``UI_status_label``: A label to show how much health we have, and how much " "ammo we have both in our gun and in reserves." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:948 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:950 msgid "" "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` " "function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 msgid "Let's go over what's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:984 msgid "" "First we get the :ref:`AnimationPlayer ` node and " "assign it to the ``animation_manager`` variable. Then we set the callback " @@ -25791,24 +26113,24 @@ msgid "" "function, but we'll get there soon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:988 msgid "" "Next we get all of the weapon nodes and assign them to ``weapons``. This " "will allow us to access the weapon nodes only with their name (``KNIFE``, " "``PISTOL``, or ``RIFLE``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:989 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 msgid "" "We then get ``Gun_Aim_Point``'s global position so we can rotate the " "player's weapons to aim at it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:991 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 msgid "Then we go through each weapon in ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:993 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:995 msgid "" "We first get the weapon node. If the weapon node is not ``null``, we then " "set it's ``player_node`` variable to this script (``Player.gd``). Then we " @@ -25816,56 +26138,56 @@ msgid "" "then rotate it by ``180`` degrees on the ``Y`` axis." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:998 msgid "" "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis " "because our camera is pointing backwards. If we did not rotate all of these " "weapon points by ``180`` degrees, all of the weapons would fire backwards." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:999 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 msgid "" "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to " "``UNARMED``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1001 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1003 msgid "Finally, we get the UI :ref:`Label ` from our HUD." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1005 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1007 msgid "" "Lets add a new function call to ``_physics_process`` so we can change " "weapons. Here's the new code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1015 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1017 msgid "Now we will call ``process_changing_weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1019 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1021 msgid "" "Now lets add all of the player input code for the weapons in " "``process_input``. Add the following code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1059 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 msgid "Lets go over the additions, starting with how we're changing weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1061 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 msgid "" "First we get the current weapon's number and assign it to " "``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1063 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1065 msgid "" "Then we check to see if any of the number keys (keys 1-4) are pressed. If " "they are, we set ``weapon_change_number`` to the value mapped at that key." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1066 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1068 msgid "" "The reason key 1 is mapped to ``0`` is because the first element in a list " "is mapped to zero, not one. Most list/array accessors in most programming " @@ -25873,14 +26195,14 @@ msgid "" "Zero-based_numbering for more information." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 msgid "" "Next we check to see if ``shift_weapon_positive`` or " "``shift_weapon_negative`` is pressed. If one of them are, we add/subtract " "``1`` from ``weapon_change_number``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1072 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1074 msgid "" "Because the player may have shifted ``weapon_change_number`` outside of the " "number of weapons the player has, we clamp it so it cannot exceed the " @@ -25888,7 +26210,7 @@ msgid "" "``weapon_change_number`` is ``0`` or more." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1075 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1077 msgid "" "Then we check to make sure the player is not already changing weapons. If " "the player is not, we then check to see if the weapon the player wants to " @@ -25898,49 +26220,45 @@ msgid "" "set ``changing_weapon`` to true." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1079 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1081 msgid "" "For firing the weapon we first check to see if the ``fire`` action is " "pressed. Then we check to make sure the player is not changing weapons. Next " "we get the weapon node for the current weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1083 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1085 msgid "" "If the current weapon node does not equal null, and the player is in it's " "``IDLE_ANIM_NAME`` state, we set the player's animation to the current " "weapon's ``FIRE_ANIM_NAME``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1088 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 msgid "Lets add ``process_changing_weapons`` next." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1090 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1126 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 msgid "Lets go over what's happening here:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 msgid "" -"The first thing we do is make sure we've revived input to change weapons. We " -"do this by making sure ``changing_weapons`` is ``true``." +"The first thing we do is make sure we've received input to change weapons. " +"We do this by making sure ``changing_weapons`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1130 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 msgid "" "Next we define a variable (``weapon_unequipped``) so we can check whether " "the current weapon has been successfully unequipped or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1132 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 msgid "Then we get the current weapon from ``weapons``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1134 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1136 msgid "" "If the current weapon is not ``null``, then we have need to check to see if " "the weapon is enabled or not. If the weapon is enabled, we call it's " @@ -25949,7 +26267,7 @@ msgid "" "weapon has successfully been unequipped." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 msgid "" "If the current weapon is ``null``, then we can simply set " "``weapon_unequipped`` to ``true``. The reason we do this check is because " @@ -25958,19 +26276,19 @@ msgid "" "player wants to change to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1140 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 msgid "" "If the player has successfully unequipped the current weapon " "(``weapon_unequipped == true``), we need to equip the new weapon." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1142 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 msgid "" "First we define a new variable (``weapon_equipped``) for tracking whether " "the player has successfully equipped the new weapon or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1144 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1146 msgid "" "Then we get the weapon the player wants to change to. If the weapon the " "player wants to change to is not ``null``, we then check to see whether or " @@ -25979,47 +26297,47 @@ msgid "" "``weapon_equipped`` to ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1147 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1149 msgid "" "If the weapon the player wants to change to is ``null``, we simply set " "``weapon_equipped`` to ``true`` because we do not have any node/script for " "``UNARMED``, nor do we have any animations." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1150 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1152 msgid "" "Finally, we check to see if the player has successfully equipped the new " "weapon. If the player has, we set ``changing_weapon`` to ``false`` because " "the player is no longer changing weapons. We also set " "``current_weapon_name`` to ``changing_weapon_name``, since the current " -"weapon has changed, and then we set ``changing_weapon_name`` to a empty " +"weapon has changed, and then we set ``changing_weapon_name`` to an empty " "string." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1156 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 msgid "" "Now, we need to add one more function to the player, and then the player is " "ready to start firing the weapons!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1158 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1160 msgid "" "We need to add ``fire_bullet``, which will be called when by the :ref:" "`AnimationPlayer ` at those points we set earlier in " "the :ref:`AnimationPlayer ` function track:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 msgid "Lets go over what this function is doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 msgid "" -"First we check if to see if the player is changing weapons or not. If the " +"First we check to see if the player is changing weapons or not. If the " "player is changing weapons, we do not want shoot so we ``return``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1174 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1176 msgid "" "Calling ``return`` stops the rest of the function from being called. In this " "case, we are not returning a variable because we are only interested in not " @@ -26027,53 +26345,53 @@ msgid "" "variable either when we call this function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1178 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 msgid "" "Then we tell the current weapon the player is using to fire by calling its " "``fire_weapon`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1180 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1182 msgid "" "Remember how we mentioned the speed of the animations for firing was faster " "than the other animations? By changing the firing animation speeds, you can " "change how fast the weapon fires bullets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1186 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1188 msgid "" "Before we are ready to test our new weapons, we still have a little bit of " "work to do." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1189 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 msgid "Creating some test subjects" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1191 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1193 msgid "" "Create a new script by going to the scripting window, clicking \"file\", and " "selecting new. Name this script ``RigidBody_hit_test`` and make sure it " "extends :ref:`RigidBody `." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1194 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1196 msgid "Now we need to add this code:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1211 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1213 msgid "Lets go over how ``bullet_hit`` works:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1214 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1216 msgid "" "First we get the bullet's forward directional vector. This is so we can tell " -"which direction the bullet will hit the :ref:`RigidBody ` " -"at. We will use this to push the :ref:`RigidBody ` in the " -"same direction as the bullet." +"from which direction the bullet will hit the :ref:`RigidBody " +"`. We will use this to push the :ref:`RigidBody " +"` in the same direction as the bullet." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 msgid "" "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the " "bullet's back a bit more of a punch and move the :ref:`RigidBody " @@ -26083,11 +26401,11 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1221 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 msgid "Then we apply a impulse using ``apply_impulse``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1223 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1225 msgid "" "First, we need to calculate the position for the impulse. Because " "``apply_impulse`` takes a vector relative to the :ref:`RigidBody " @@ -26100,57 +26418,57 @@ msgid "" "`." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1229 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1231 msgid "" "Finally, we need to calculate the force for the impulse. For this we use the " "bullet is facing and multiply it by the bullet's damage. This gives a nice " "result and for stronger bullets, we get a stronger result." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1234 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 msgid "" "Now we need to attach this script to all of the :ref:`RigidBody " "` nodes we want to effect." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1236 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 msgid "" "Open up ``Testing_Area.tscn`` and select all of the cubes parented to the " "``Cubes`` node." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1238 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1240 msgid "" "If you select the top cube, and then hold down ``shift`` and select the last " "cube, Godot will select all of the cubes in between!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1241 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1243 msgid "" "Once you have all of the cubes selected, scroll down in the inspector until " -"you get to the the \"scripts\" section. Click the drop down and select \"Load" -"\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1249 -msgid "" -"That was a lot of code! But now with all that done you can go give your " -"weapons a test!" +"you get to the \"scripts\" section. Click the drop down and select \"Load\". " +"Open your newly created ``RigidBody_hit_test.gd`` script." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1251 msgid "" +"That was a lot of code! But now with all that done you can go and give your " +"weapons a test!" +msgstr "" + +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1253 +msgid "" "You should now be able to fire as many bullets as you want on the cubes and " "they will move in response to the bullets colliding into them." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1254 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1256 msgid "" "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as " "well as some sounds!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1258 +#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1260 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_2.zip `" @@ -26337,7 +26655,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:156 msgid "" "Ideally we'd like to let the player be able to see how much ammo is left. " -"Let's make a new function called ``process_ui``." +"Let's make a new function called ``process_UI``." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:158 @@ -26350,7 +26668,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:172 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:234 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:162 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:217 msgid "Let's go over what's happening:" msgstr "" @@ -26402,8 +26720,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:202 msgid "" -"``CAN_REFIL``: A boolean to track whether we can refill this weapon's spare " -"ammo. We will not be using ``CAN_REFIL`` in this part, but we will in the " +"``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare " +"ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the " "next part!" msgstr "" @@ -26586,8 +26904,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 msgid "" -"This makes it where the player cannot change weapons if the player is " -"reloading." +"This makes it so the player cannot change weapons if the player is reloading." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 @@ -26732,7 +27049,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:533 -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:291 msgid "Let's go over what's happening here:" msgstr "" @@ -26898,7 +27215,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:632 msgid "" -"Now when the player fires the pistol, we'll play the ``pistol_shot`` sound." +"Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:634 @@ -26911,7 +27228,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:641 #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:663 -msgid "Now when the player reloads, we'll play the ``gun_cock`` sound." +msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:645 @@ -26926,7 +27243,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:654 msgid "" -"Now when the player fires the rifle, we'll play the ``rifle_shot`` sound." +"Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 @@ -26936,8 +27253,8 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:672 msgid "" -"At this point we have all of the basics of a FPS working. There's still a " -"few things that would be nice to add, and we're going to add them in the " +"At this point we have all of the basics of a FPS game working. There's still " +"a few things that would be nice to add, and we're going to add them in the " "next three parts!" msgstr "" @@ -26950,7 +27267,7 @@ msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:678 msgid "" -"In In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " +"In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, " "along with some health and ammo pick ups! We're also going to add joypad " "support, so we can play with wired Xbox 360 controllers!" msgstr "" @@ -27035,7 +27352,7 @@ msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Right)``" +msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:39 @@ -27099,30 +27416,30 @@ msgid "" "``input_movement_vector = input_movement_vector.normalized()``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:94 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:114 msgid "Let's go over what we're doing." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:96 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:116 msgid "First we check to see if there is a connected joypad." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:98 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:118 msgid "" "If there is a joypad connected, we then get its left stick axes for right/" "left and up/down. Because a wired Xbox 360 controller has different joystick " "axis mapping based on OS, we will use different axes based on the OS." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:102 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 msgid "" -"This tutorial assumes you are using a XBox 360 wired controller. Also, I do " -"not (currently) have access to a Mac computer, so the joystick axes may need " -"changing. If they do, please open a GitHub issue on the Godot documentation " -"repository! Thanks!" +"This tutorial assumes you are using a XBox 360 or a Playstation wired " +"controller. Also, I do not (currently) have access to a Mac computer, so the " +"joystick axes may need changing. If they do, please open a GitHub issue on " +"the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:106 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:126 msgid "" "Next we check to see if the joypad vector length is within the " "``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty " @@ -27130,108 +27447,108 @@ msgid "" "zone calculating." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:109 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:129 msgid "" "You can find a great article explaining all about how to handle joypad/" "controller dead zones here: http://www.third-helix.com/2013/04/12/doing-" "thumbstick-dead-zones-right.html" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:112 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:132 msgid "" "We're using a translated version of the scaled radial dead zone code " "provided in that article. The article is a great read, and I highly suggest " "giving it a look!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:135 msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:137 msgid "" "Remember how we normalize ``input_movement_vector``? This is why! If we did " "not normalize ``input_movement_vector``, the player could move faster if the " "player pushes in the same direction with both the keyboard and the joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:122 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:142 msgid "" "Make a new function called ``process_view_input`` and add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:164 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:219 msgid "" "First we check the mouse mode. If the mouse mode is not " "``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:166 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:221 msgid "" "Next we define a new :ref:`Vector2 ` called ``joypad_vec``. " "This will hold the right joystick position. Based on the OS, we set its " "values so it is mapped to the proper axes for the right joystick." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:169 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:224 msgid "" "As stated above, I do not (currently) has access to a Mac computer, so the " "joystick axes may need changing. If they do, please open a GitHub issue on " "the Godot documentation repository! Thanks!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:172 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:227 msgid "" "We then account for the joypad's dead zone, exactly like in " "``process_input``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:174 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:229 msgid "" "Then we rotate ``rotation_helper`` and the player's :ref:`KinematicBody " "` using ``joypad_vec``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:176 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:231 msgid "" "Notice how the code that handles rotating the player and ``rotation_helper`` " "is exactly the same as the code in ``_input``. All we've done is change the " "values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:179 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:234 msgid "" "Due to few mouse related bugs on Windows, we cannot put mouse rotation in " "``process_view`` as well. Once these bugs are fixed, this will likely be " "updated to place the mouse rotation here in ``process_view_input`` as well." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:182 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:237 msgid "" "Finally, we clamp the camera's rotation so the player cannot look upside " "down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:186 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 msgid "" "The last thing we need to do is add ``process_view_input`` to " "``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:188 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:243 msgid "" "Once ``process_view_input`` is added to ``_physics_process``, you should be " "able to play using a joypad!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:190 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:245 msgid "" "I decided not to use the joypad triggers for firing because we'd then have " "to do some more axis managing, and because I prefer to use a shoulder " "buttons to fire." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:192 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:247 msgid "" "If you want to use the triggers for firing, you will need to change how " "firing works in ``process_input``. You need to get the axis values for the " @@ -27239,49 +27556,49 @@ msgid "" "If it is, you add the same code as when the ``fire`` action was pressed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:196 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 msgid "Adding mouse scroll wheel input" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:198 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:253 msgid "" "Let's add one more input related feature before we start working on the pick " "ups and the target. Let's add the ability to change weapons using the scroll " "wheel on the mouse." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:200 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:458 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:511 msgid "Open up ``Player.gd`` and add the following class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:207 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:262 msgid "Let's go over what each of these new variables will be doing:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:209 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:210 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:265 msgid "" "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action " "increases mouse_scroll_value" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:214 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:269 msgid "Now let's add the following to ``_input``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:238 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:293 msgid "" "First we check if the event is a ``InputEventMouseButton`` event and that " "the mouse mode is ``MOUSE_MODE_CAPTURED``. Then we check to see if the " "button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:241 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:296 msgid "" "If the event's index is indeed a button wheel index, we then check to see if " "it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether " @@ -27289,27 +27606,27 @@ msgid "" "``mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:299 msgid "" "Next we clamp mouse scroll value to assure it is inside the range of " "selectable weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:301 msgid "" "We then check to see if the player is changing weapons or reloading. If the " "player is doing neither, we round ``mouse_scroll_value`` and cast it to a " "``int``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:248 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:303 msgid "" "We are casting ``mouse_scroll_value`` to a ``int`` so we can use it as a key " "in our dictionary. If we left it as a float, we would get an error when we " "try to run the project." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:251 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:306 msgid "" "Next we check to see if the weapon name at ``round_mouse_scroll_value`` is " "not equal to the current weapon name using ``weapon_number_to_name``. If the " @@ -27319,7 +27636,7 @@ msgid "" "``mouse_scroll_value`` to ``round_mouse_scroll_value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:255 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:310 msgid "" "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value " "is because we do not want the player to keep their mouse scroll wheel just " @@ -27328,14 +27645,14 @@ msgid "" "assure that each weapon takes exactly the same amount of scrolling to change." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:316 msgid "" "One more thing we need to change is in ``process_input``. In the code for " "changing weapons, add the following right after the line ``changing_weapon = " "true``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:267 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:322 msgid "" "Now the scroll value will be changed with the keyboard input. If we did not " "change this, the scroll value will be out of sync. If the scroll wheel is " @@ -27344,32 +27661,32 @@ msgid "" "to." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:272 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:327 msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:275 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:330 msgid "Adding the health pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:277 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:332 msgid "" "Now that the player has health and ammo, we ideally need a way to replenish " "those resources." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:279 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:334 msgid "Open up ``Health_Pickup.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:281 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:336 msgid "" "Expand ``Holder`` if it's not already expanded. Notice how we have two " "Spatial nodes, one called ``Health_Kit`` and another called " "``Health_Kit_Small``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:283 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:338 msgid "" "This is because we're actually going to be making two sizes of health pick " "ups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` " @@ -27377,7 +27694,7 @@ msgid "" "children." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:286 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:341 msgid "" "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` " "node we're going to use to check if the player has walked close enough to " @@ -27387,54 +27704,54 @@ msgid "" "trigger collision shape closer to it's size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:345 msgid "" "The last thing to note is how we have a :ref:`AnimationPlayer " "` node so the health kit spins around slowly and bobs " "up and down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:347 msgid "" "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. " "Add the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:351 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:406 msgid "" "Let's go over what this script is doing, starting with its class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:353 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 msgid "" "``kit_size``: The size of the health pick up. Notice how we're using a " "``setget`` function to tell if it's changed." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:354 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 msgid "" "``HEALTH_AMMOUNTS``: The amount of health each pick up in each size contains." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:355 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 msgid "" "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health " "pick up to respawn" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:356 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 msgid "" "``respawn_timer``: A variable used to track how long the health pick up has " "been waiting to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:357 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:412 msgid "" "``is_ready``: A variable to track whether the ``_ready`` function has been " "called or not." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:359 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 msgid "" "We're using ``is_ready`` because ``setget`` functions are called before " "``_ready``, we need to ignore the first kit_size_change call, because we " @@ -27442,38 +27759,38 @@ msgid "" "the first ``setget`` call, we would get several errors in the debugger." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:363 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:418 msgid "" -"Also, notice how we are using a exported variable. This is so we can change " +"Also, notice how we are using an exported variable. This is so we can change " "the size of the health pick ups in the editor. This makes it where we do not " "have to make two scenes for the two sizes, since we can easily change sizes " "in the editor using the exported variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:366 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:421 msgid "" "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of " -"of export hints you can use." +"export hints you can use." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:370 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:425 msgid "Let's look at ``_ready``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:372 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:427 msgid "" "First we connect the ``body_entered`` signal from the " "``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This " -"makes is where any body that enters the :ref:`Area ` triggers " +"makes it where any body that enters the :ref:`Area ` triggers " "the ``trigger_body_entered`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:375 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:430 msgid "" "Next we set ``is_ready`` to ``true`` so we can use the ``setget`` function." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:377 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 msgid "" "Then we hide all of the possible kits and their collision shapes using " "``kit_size_change_values``. The first argument is the size of the kit, while " @@ -27481,29 +27798,29 @@ msgid "" "mesh at that size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:380 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:435 msgid "" "Then we make only the kit size we selected visible, calling " "``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the " "size at ``kit_size`` is enabled." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:384 -msgid "Next let's look at ``kit_size_changed``." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:439 +msgid "Next let's look at ``kit_size_change``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:386 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:441 msgid "The first thing we do is check to see if ``is_ready`` is ``true``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:388 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:443 msgid "" "If ``is_ready`` is ``true``, we then make whatever kit already assigned to " "``kit_size`` disabled using ``kit_size_change_values``, passing in " "``kit_size`` and ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:390 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:445 msgid "" "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we " "call ``kit_size_change_values`` passing in ``kit_size`` again, but this time " @@ -27512,29 +27829,29 @@ msgid "" "passed in visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:393 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:448 msgid "" "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed " "in ``value``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:397 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:452 msgid "Now let's look at ``kit_size_change_values``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:399 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:454 msgid "" "The first thing we do is check to see which size was passed in. Based on " "which size we're wanting to enable/disable, we want to get different nodes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:401 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:456 msgid "" "We get the collision shape for the node corresponding to ``size`` and " "disable it based on the ``enabled`` passed in argument/variable." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:403 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 msgid "" "Why are we using ``!enable`` instead of ``enable``? This is so when we say " "we want to enable the node, we can pass in ``true``, but since :ref:" @@ -27543,13 +27860,13 @@ msgid "" "the mesh visible when ``true`` is passed in." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:462 msgid "" "We then get the correct :ref:`Spatial ` node holding the mesh " "and set its visibility to ``enable``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:464 msgid "" "This function may be a little confusing, try to think of it like this: We're " "enabling/disabling the proper nodes for ``size`` using ``enabled``. This is " @@ -27557,18 +27874,18 @@ msgid "" "mesh for the proper size will be visible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:414 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:469 msgid "Finally, let's look at ``trigger_body_entered``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:416 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:471 msgid "" "The first thing we do is see whether or not the body that just entered has a " "method/function called ``add_health``. If it does, we then call " "``add_health`` and pass in the health provided by the current kit size." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:419 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:474 msgid "" "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait " "before the player can get health again. Finally, call " @@ -27576,38 +27893,38 @@ msgid "" "at ``kit_size`` is invisible until it has waited long enough to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:479 msgid "" "The last thing we need to do before the player can use this health pick up " "is add a few things to ``Player.gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:481 msgid "Open up ``Player.gd`` and add the following class variable:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:432 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:487 msgid "``MAX_HEALTH``: The maximum amount of health a player can have." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:489 msgid "" "Now we need to add the ``add_health`` function to the player. Add the " "following to ``Player.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:497 msgid "Let's quickly go over what this does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:499 msgid "" "We first add ``additional_health`` to the player's current health. We then " "clamp the health so that it cannot exceed a value higher than " "``MAX_HEALTH``, nor a value lower than ``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:449 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:504 msgid "" "With that done, the player can now collect health! Go place a few " "``Health_Pickup`` scenes around and give it a try. You can change the size " @@ -27615,38 +27932,38 @@ msgid "" "is selected, from a convenient drop down." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:508 msgid "Adding the ammo pick ups" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:510 msgid "" "While adding health is good and all, we can't reap the rewards from adding " "it since nothing can (currently) damage us. Let's add some ammo pick ups " "next!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:458 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:513 msgid "" "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as " "``Health_Pickup.tscn``, but with the meshes and trigger collision shapes " "changed slightly to adjust for the difference in mesh sizes." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:516 msgid "" "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add " "the following:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:522 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:577 msgid "" "You may have noticed this code looks almost exactly the same as the health " "pick up. That's because it largely is the same! Only a few things have been " "changed, and that's what we're going to go over." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:525 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:580 msgid "" "First, notice how there is ``AMMO_AMOUNTS`` instead of ``HEALTH_AMMOUNTS``. " "``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pick up add to " @@ -27655,32 +27972,32 @@ msgid "" "raw ammo amount)" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:528 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 msgid "" "The only other thing to notice is in ``trigger_body_entered``. We're " "checking and calling a function called ``add_ammo`` instead of " "``add_health``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:530 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:585 msgid "" "Other than those two small changes, everything else is exactly the same as " "the health pick up!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:534 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:589 msgid "" -"All we need to do make the ammo pick ups work is add a new function to the " -"player. Open ``Player.gd`` and add the following function:" +"All we need to do for making the ammo pick ups work is to add a new function " +"to the player. Open ``Player.gd`` and add the following function:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:543 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:598 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:739 #: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 msgid "Let's go over what this function does." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:545 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:600 msgid "" "The first thing we check is to see whether the player is using ``UNARMED`` " "or not. Because ``UNARMED`` does not have a node/script, we want to make " @@ -27688,7 +28005,7 @@ msgid "" "script attached to ``current_weapon_name``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:548 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:603 msgid "" "Next we check to see if the current weapon can be refilled. If the current " "weapon can, we add a full clip/magazine worth of ammo to the weapon by " @@ -27696,13 +28013,13 @@ msgid "" "ammo clips we're adding (``additional_ammo``)." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:553 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:608 msgid "" "With that done, you should now be able to get additional ammo! Go place some " "ammo pick ups in one/both/all of the scenes and give it a try!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:555 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:610 msgid "" "Notice how we're not limiting the amount of ammo you can carry. To limit the " "amount of ammo each weapon can carry, you need to add a additional variable " @@ -27710,20 +28027,20 @@ msgid "" "after adding ammo in ``add_ammo``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:559 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:614 msgid "Adding breakable targets" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:561 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:616 msgid "Before we end this part, let's add some targets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:563 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:618 msgid "" "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:565 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:620 msgid "" "First, notice how we're not using a :ref:`RigidBody ` node, " "but rather a :ref:`StaticBody ` node instead. The reason " @@ -27732,20 +28049,20 @@ msgid "" "all it has to do is stay still." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:569 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:624 msgid "" "We also save a tiny bit of performance using a :ref:`StaticBody " "` over a :ref:`RigidBody `" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:571 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:626 msgid "" "The other thing to note is we have a node called ``Broken_Target_Holder``. " "This node is going to hold a spawned/instanced scene called ``Broken_Target." "tscn``. Open up ``Broken_Target.tscn``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:574 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:629 msgid "" "Notice how the target is broken up into five pieces, each a :ref:`RigidBody " "` node. We're going to spawn/instance this scene when the " @@ -27754,70 +28071,71 @@ msgid "" "than a shattered target was spawned/instanced." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:578 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:633 msgid "" -"While you still have ``Broken_Target.tscn`` open, attach " +"While you still have ``Broken_Target.tscn`` open and then attach " "``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` " "nodes. This will make it where the player can shoot at the broken pieces and " "they will react to the bullets." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:581 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:636 msgid "" "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:" "`StaticBody ` node and create a new script called ``Target." "gd``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:583 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:638 msgid "Add the following code to ``Target.gd``:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:641 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:907 msgid "Let's go over what this script does, starting with the class variables:" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:643 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 msgid "" "``TARGET_HEALTH``: The amount of damage needed to break a fully healed " "target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:644 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 msgid "``current_health``: The amount of health this target currently has." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:645 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 msgid "" "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` " "node so we can use it easily." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:646 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 msgid "" "``target_collision_shape``: A variable to hold the :ref:`CollisionShape " "` for the non-broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:647 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 msgid "" "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a " "target to respawn." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:648 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 msgid "" "``target_respawn_timer``: A variable to track how long a target has been " "broken." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:649 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 msgid "" "``destroyed_target``: A :ref:`PackedScene ` to hold the " "broken target scene." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:651 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:706 msgid "" "Notice how we're using a exported variable (a :ref:`PackedScene " "`) to get the broken target scene instead of using " @@ -27827,11 +28145,11 @@ msgid "" "scene we're using." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:657 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:712 msgid "Let's look at ``_ready``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:659 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:714 msgid "" "The first thing we do is get the broken target holder and assign it to " "``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` " @@ -27839,39 +28157,39 @@ msgid "" "``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:662 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 msgid "" "At the time of when this was written, I did not realize you can use ``$\"../" "NodeName\"`` to get the parent nodes using ``$``, which is why " "``get_parent().get_node()`` is used instead." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:665 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 msgid "" "Next we get the collision shape and assign it to ``target_collision_shape``. " -"The reason we need to collision shape is because even when the mesh is " +"The reason we need the collision shape is because even when the mesh is " "invisible, the collision shape will still exist in the physics world. This " "makes it where the player can interact with a non-broken target even though " "it's invisible, which is not what we want. To get around this, we will " "disable/enable the collision shape as we make the mesh visible/invisible." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:671 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:726 msgid "Next let's look at ``_physics_process``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:673 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 msgid "" "We're only going to be using ``_physics_process`` for respawning, and so the " "first thing we do is check to see if ``target_respawn_timer`` is more than " "``0``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:675 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 msgid "If it is, we then remove ``delta`` from it." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:677 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:732 msgid "" "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The " "reason behind this is since we just removed ``delta`` from " @@ -27880,67 +28198,67 @@ msgid "" "finished." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:680 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 msgid "In this case, we want to respawn the target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:682 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:737 msgid "" "The first thing we do is remove all children in the broken target holder. We " "do this by iterating over all of the children in ``broken_target_holder`` " "and free them using ``queue_free``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:684 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:739 msgid "" "Next we enable the collision shape by setting its ``disabled`` boolean to " "``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:686 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:741 msgid "Then we make the target, and all of it's children nodes, visible again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:688 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:743 msgid "" "Finally, we reset the target's health (``current_health``) to " "``TARGET_HEALTH``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:692 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:747 #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:904 msgid "Finally, let's look at ``bullet_hit``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:694 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:749 msgid "" -"The first the we do is remove however much damage the bullet does from the " +"The first thing we do is remove however much damage the bullet does from the " "target's health." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:696 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:751 msgid "" "Next we check to see if the target is at ``0`` health or lower. If it is, " "the target has just died and we need to spawn a broken target." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:753 msgid "" "We first instance a new destroyed target scene, and assign it to a new " -"variable, ``clone``." +"variable, a ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "Next we add ``clone`` as a child of the broken target holder." +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:755 +msgid "Next we add the ``clone`` as a child of the broken target holder." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:757 msgid "" "For bonus effect, we want to make all of the target pieces explode outwards. " "To do this, we iterate over all of the children in ``clone``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:704 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:759 msgid "" "For each child, we first check to see if it's a :ref:`RigidBody " "` node. If it is, we then calculate the center position of " @@ -27950,34 +28268,34 @@ msgid "" "center, using the damage of the bullet as the force." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:708 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:763 msgid "" "We multiply the damage by ``12`` so it has a more dramatic effect. You can " "change this to a higher or lower value depending on how explosive you want " "your targets to shatter." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:766 msgid "" "Next we set the target's respawn timer. We set the timer to " -"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` many seconds " -"for the target to respawn." +"``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds " +"until it is respawned." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:768 msgid "" "Then we disable the non-broken target's collision shape, and set the " "target's visibility to ``false``." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:717 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:772 msgid "" "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` " "in the editor! Otherwise the targets will not be destroyed and you will get " "an error!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:720 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:775 msgid "" "With that done, go place some ``Target.tscn`` instances around in one/both/" "all of the levels. You should find they explode into five pieces after " @@ -27985,20 +28303,20 @@ msgid "" "whole target again." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:728 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:783 msgid "" "Now you can use a joypad, change weapons with the mouse's scroll wheel, " "replenish your health and ammo, and break targets with your weapons." msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:730 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:785 msgid "" "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add " "grenades to our player, give our player the ability to grab and throw " "objects, and add turrets!" msgstr "" -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:735 +#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:790 msgid "" "You can download the finished project for this part here: :download:" "`Godot_FPS_Part_4.zip `" @@ -29009,6 +29327,7 @@ msgid "" msgstr "" #: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:455 msgid "Now let's go through ``_physics_process``." msgstr "" @@ -30764,15 +31083,32 @@ msgid "" msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:102 +msgid "Compressor has may uses in the mix, for example:" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:104 msgid "" -"Compressor has may uses in the mix, for example: * It can be used in the " -"Master bus to compress the whole output (Although a Limiter is probably " -"better) * It can be used in voice channels to ensure they sound as even as " -"possible. * It can be *Sidechained*. This means, it can reduce the sound " -"level using another audio bus for threshold detection. This technique is " -"very common in video game mixing to download the level of Music/SFX while " -"voices are being heard. * It can accentuate transients by using a bit wider " -"attack, meaning it can make sound effects sound more punchy." +"It can be used in the Master bus to compress the whole output (Although a " +"Limiter is probably better)" +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:105 +msgid "" +"It can be used in voice channels to ensure they sound as even as possible." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:106 +msgid "" +"It can be *Sidechained*. This means, it can reduce the sound level using " +"another audio bus for threshold detection. This technique is very common in " +"video game mixing to download the level of Music/SFX while voices are being " +"heard." +msgstr "" + +#: ../../docs/tutorials/audio/audio_buses.rst:107 +msgid "" +"It can accentuate transients by using a bit wider attack, meaning it can " +"make sound effects sound more punchy." msgstr "" #: ../../docs/tutorials/audio/audio_buses.rst:109 @@ -33607,12 +33943,6 @@ msgstr "" msgid "An example:" msgstr "" -#: ../../docs/tutorials/animation/index.rst:2 -#: ../../docs/tutorials/animation/cutout_animation.rst:279 -#: ../../docs/development/file_formats/tscn.rst:365 -msgid "Animation" -msgstr "" - #: ../../docs/tutorials/animation/introduction_2d.rst:4 msgid "Introduction to the 2D animation features" msgstr "" @@ -35584,8 +35914,8 @@ msgid "" "the project. On desktop operating systems, the engine uses the typical ``~/." "local/share/godot/app_userdata/Name`` on macOS and Linux, and ``%APPDATA%/" "Name`` on Windows. ``Name`` is taken from the application name defined in " -"the Project Settings, but it can be overriden on a per-platform basis using :" -"ref:`feature tags `." +"the Project Settings, but it can be overridden on a per-platform basis " +"using :ref:`feature tags `." msgstr "" #: ../../docs/tutorials/io/saving_games.rst:4 @@ -35792,9 +36122,9 @@ msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:25 msgid "" -"We would be using the offical demo as an example, you can download it in the " -"AssetLib: https://godotengine.org/asset-library/asset/134 or find it in the " -"demo_projects/gui/translation" +"We would be using the official demo as an example, you can download it in " +"the AssetLib: https://godotengine.org/asset-library/asset/134 or find it in " +"the demo_projects/gui/translation" msgstr "" #: ../../docs/tutorials/i18n/internationalizing_games.rst:28 @@ -39491,11 +39821,11 @@ msgid "" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:27 -msgid "Rendering 3d objects within a 2d game" +msgid "Rendering 3D objects within a 2D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:28 -msgid "Rendering 2d elements in a 3d game" +msgid "Rendering 2D elements in a 3D game" msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:29 @@ -39523,7 +39853,7 @@ msgid "" "properly adjusted and scaled input events to all their children nodes. " "Typically input is received by the nearest :ref:`Viewport ` " "in the tree, but you can set :ref:`Viewports ` to not " -"recieve input by checking 'Disable Input' to 'on', this will allow the next " +"receive input by checking 'Disable Input' to 'on', this will allow the next " "nearest :ref:`Viewport ` in the tree to capture the input." msgstr "" @@ -39564,10 +39894,10 @@ msgid "" "CameraA will display on the Root :ref:`Viewport ` and it " "will draw MeshA. CameraB will be captured by the :ref:`Viewport " "` Node along with MeshB. Even though MeshB is in the scene " -"heirarchy, it will still not be drawn to the Root :ref:`Viewport " +"hierarchy, it will still not be drawn to the Root :ref:`Viewport " "`. Similarly MeshA will not be visible from the :ref:" -"`Viewport ` node becuase :ref:`Viewport ` " -"nodes only capture nodes below them in the heirarchy." +"`Viewport ` node because :ref:`Viewport ` " +"nodes only capture nodes below them in the hierarchy." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:75 @@ -39624,7 +39954,7 @@ msgid "" "with the parent :ref:`Viewport's ` :ref:`World " "`. This is especially useful in scenarios where, for example, " "you might want to show a separate character in 3D imposed over the game " -"(like in Starcraft)." +"(like in StarCraft)." msgstr "" #: ../../docs/tutorials/viewports/viewports.rst:116 @@ -39691,7 +40021,7 @@ msgid "" "display anything it has inside. The layout looks like this:" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:170 +#: ../../docs/tutorials/viewports/viewports.rst:169 msgid "" "The :ref:`Viewport ` will cover the area of its parent :ref:" "`ViewportContainer ` completely if stretch is set " @@ -39700,7 +40030,7 @@ msgid "" "smaller than the size of the :ref:`Viewport `." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:177 +#: ../../docs/tutorials/viewports/viewports.rst:176 msgid "" "Due to the fact that the :ref:`Viewport ` is an entryway " "into another rendering surface, it exposes a few rendering properties that " @@ -39711,7 +40041,7 @@ msgid "" "want to store values in the texture that are outside the range 0.0 - 1.0." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:183 +#: ../../docs/tutorials/viewports/viewports.rst:181 msgid "" "If you know how the :ref:`Viewport ` is going to be used, " "you can set its Usage to either 3D or 2D. Godot will then restrict how the :" @@ -39719,7 +40049,7 @@ msgid "" "default is 3D." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:186 +#: ../../docs/tutorials/viewports/viewports.rst:184 msgid "" "Godot also provides a way of customizing how everything is drawn inside :ref:" "`Viewports ` using “Debug Draw”. Debug Draw allows you to " @@ -39727,43 +40057,43 @@ msgid "" "will display things drawn inside it. Debug Draw is disabled by default." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:192 +#: ../../docs/tutorials/viewports/viewports.rst:190 msgid "*A scene drawn with Debug Draw disabled*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:194 +#: ../../docs/tutorials/viewports/viewports.rst:192 msgid "" "The other three options are Unshaded, Overdraw, and Wireframe. Unshaded " "draws the scene without using lighting information so all the objects appear " "flatly colored the color of their albedo." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:200 +#: ../../docs/tutorials/viewports/viewports.rst:198 msgid "*The same scene with Debug Draw set to Unshaded*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:202 +#: ../../docs/tutorials/viewports/viewports.rst:200 msgid "" "Overdraw draws the meshes semi-transparent with an additive blend so you can " "see how the meshes overlap." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:206 +#: ../../docs/tutorials/viewports/viewports.rst:204 msgid "*The same scene with Debug Draw set to Overdraw*" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:208 +#: ../../docs/tutorials/viewports/viewports.rst:206 msgid "" "Lastly, Wireframe draws the scene using only the edges of triangles in the " -"meshes. NOTE: as of the writting of this (v3.0.2) wireframe is broken and " -"currently just renders the scene normally." +"meshes. NOTE: As of this writing (v3.0.2), wireframe mode is not functional " +"and currently renders the scene normally." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:212 +#: ../../docs/tutorials/viewports/viewports.rst:210 msgid "Render target" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:214 +#: ../../docs/tutorials/viewports/viewports.rst:212 msgid "" "When rendering to a :ref:`Viewport ` whatever is inside will " "not be visible in the scene editor. To display the contents, you have to " @@ -39772,17 +40102,17 @@ msgid "" "(for example):" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:224 +#: ../../docs/tutorials/viewports/viewports.rst:222 msgid "" "Or it can be assigned in the editor by selecting \"New ViewportTexture\"" msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:228 +#: ../../docs/tutorials/viewports/viewports.rst:226 msgid "" "and then selecting the :ref:`Viewport ` you want to use." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:232 +#: ../../docs/tutorials/viewports/viewports.rst:230 msgid "" "Every frame the :ref:`Viewport `'s texture is cleared away " "with the default clear color (or a transparent color if Transparent BG is " @@ -39792,7 +40122,7 @@ msgid "" "itself to Never." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:237 +#: ../../docs/tutorials/viewports/viewports.rst:235 msgid "" "By default, re-rendering of the :ref:`Viewport ` happens " "when the :ref:`Viewport `'s :ref:`ViewportTexture " @@ -39803,7 +40133,7 @@ msgid "" "without incurring the cost of rendering every frame." msgstr "" -#: ../../docs/tutorials/viewports/viewports.rst:245 +#: ../../docs/tutorials/viewports/viewports.rst:243 msgid "" "Make sure to check the Viewport demos! Viewport folder in the demos archive " "available to download, or https://github.com/godotengine/godot-demo-projects/" @@ -39815,30 +40145,36 @@ msgid "Multiple resolutions" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:7 -msgid "Base resolution" +msgid "Base size" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:9 msgid "" -"A base screen resolution for the project can be specified in the project " -"settings under ``display``, ``window``" +"A base size for the window can be specified in the project settings under " +"\"Display\", \"Window\"." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:14 msgid "" -"However, what it does is not completely obvious. When running on PC, the " -"engine will attempt to set this resolution (or use something smaller if it " -"fails). On mobile, consoles or devices with a fixed resolution or full " -"screen rendering, this resolution will be ignored and the native resolution " -"will be used instead. To compensate for this, Godot offers many ways to " -"control how the screen will resize and stretch to different screen sizes." +"However, what it does is not completely obvious; the engine will *not* " +"attempt to switch the monitor to this resolution. Rather, think of this " +"setting as the \"design size\", i.e. the size of the area that you work with " +"in the editor. This setting corresponds directly to the size of the blue " +"rectangle in the 2D editor." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:23 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:20 +msgid "" +"There is often a need to support devices with screen and window sizes that " +"are different from this base size. Godot offers many ways to control how the " +"viewport will be resized and stretched to different screen sizes." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:26 msgid "Resizing" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:25 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:28 msgid "" "There are several types of devices, with several types of screens, which in " "turn have different pixel density and resolutions. Handling all of them can " @@ -39849,7 +40185,7 @@ msgid "" "by calling ``get_tree().get_root()`` or ``get_node(\"/root\")``)." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:34 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:37 msgid "" "In any case, while changing the root Viewport params is probably the most " "flexible way to deal with the problem, it can be a lot of work, code and " @@ -39857,89 +40193,197 @@ msgid "" "settings to handle multiple resolutions." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:40 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:43 msgid "Stretch settings" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:42 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:45 msgid "" "Stretch settings are located in the project settings, it's just a bunch of " "configuration variables that provide several options:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:48 -msgid "Stretch mode" -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:50 -msgid "" -"**Disabled**: The first is the stretch mode. By default this is disabled, " -"which means no stretching happens (the bigger the screen or window, the " -"bigger the resolution, always matching pixels 1:1)." +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:51 +msgid "Stretch Mode" msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:53 msgid "" -"**2D**: In this mode, the resolution specified in display/width and display/" -"height in the project settings will be stretched to cover the whole screen. " -"This means that 3D will be unaffected (will just render to higher-res) and " -"2D will also be rendered at higher-res, just enlarged." +"The \"Stretch Mode\" setting defines how the base size is stretched to fit " +"the resolution of the window or screen." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:58 msgid "" -"**Viewport**: Viewport scaling is different, the root :ref:`Viewport " -"` is set as a render target, and still renders precisely to " -"the resolution specified in the ``display/`` section of the project " -"settings. Finally, this viewport is copied and scaled to fit the screen. " -"This mode is useful when working with pixel-precise games, or for the sake " -"of rendering to a lower resolution for improving performance." +"The animations below use a \"base size\" of just 16×9 pixels to demonstrate " +"the effect of different stretch modes. A single sprite, also 16×9 pixels in " +"size, covers the entire viewport, and a diagonal :ref:`Line2D " +"` is added on top of it:" msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:70 -msgid "Stretch aspect" +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:68 +msgid "" +"Stretch Mode = **Disabled** (default): No stretching happens. One unit in " +"the scene corresponds to one pixel on the screen. In this mode, the " +"\"Stretch Aspect\" setting has no effect." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:72 msgid "" -"**Ignore**: Ignore the aspect ratio when stretching the screen. This means " -"that the original resolution will be stretched to fit the new one, even if " -"it's wider or narrower." +"This is a good option if you want full control over every screen pixel, and " +"is probably the best option for 3D games." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:75 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:77 msgid "" -"**Keep**: Keep aspect ratio when stretching the screen. This means that the " -"original resolution will be kept when fitting the new one, and black bars " -"will be added to the sides or the top/bottom of the screen." -msgstr "" - -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:79 -msgid "" -"**Keep Width**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is taller than the specified resolution, it will be " -"stretched vertically (and more vertical resolution will be reported in the " -"viewport, proportionally). This is usually the best option for creating GUIs " -"or HUDs that scale, so some controls can be anchored to the bottom (:ref:" -"`doc_size_and_anchors`)." +"Stretch Mode = **2D**: In this mode, the size specified in display/width and " +"display/height in the project settings will be stretched to cover the whole " +"screen (taking the \"Stretch Aspect\" setting into account). This means that " +"everything will be rendered directly at the target resolution. 3D will be " +"largely unaffected, while in 2D there is no longer a 1:1 correspondence " +"between sprite pixels and screen pixels, which may result in scaling " +"artifacts." msgstr "" #: ../../docs/tutorials/viewports/multiple_resolutions.rst:85 msgid "" -"**Keep Height**: Keep aspect ratio when stretching the screen, but if the " -"resulting screen is wider than the specified resolution, it will be " -"stretched horizontally (and more horizontal resolution will be reported in " -"the viewport, proportionally). This is usually the best option for 2D games " -"that scroll horizontally (like runners or platformers)." +"This is a good option if your 2D artwork has a sufficiently high resolution " +"and does not require pixel-perfect rendering. Consider enabling texture " +"filtering and mipmapping on your 2D textures and fonts." msgstr "" -#: ../../docs/tutorials/viewports/multiple_resolutions.rst:91 +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:92 msgid "" -"**Expand**: Keep aspect ratio when stretching the screen, but keep neither " -"width nor height. Depending on the screen aspect ratio, the viewport will " -"either report more horizontal resolution (if the screen is wider than the " -"original resolution) or more vertical resolution (if the screen is taller " -"than the original resolution)." +"Stretch Mode = **Viewport**: Viewport scaling means that the size of the " +"root :ref:`Viewport ` is set precisely to the base size " +"specified in the \"Display\" section of the project settings. The scene is " +"rendered to this viewport first. Finally, this viewport is scaled to fit the " +"screen (taking the \"Stretch Aspect\" setting into account)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:99 +msgid "" +"This mode is useful when working with pixel-precise games, or for the sake " +"of rendering to a lower resolution for improving performance." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:105 +msgid "Stretch Aspect" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:107 +msgid "" +"The second setting is the stretch aspect. Note that this only takes effect " +"if \"Stretch Mode\" is set to something other than \"disabled\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:110 +msgid "" +"In the animations below, you will notice gray and black areas. The black " +"areas are added by the engine and cannot be drawn into. The gray areas are " +"part of your scene, and can be drawn to. The gray areas correspond to the " +"region outside the blue frame you see in the 2D editor." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:115 +msgid "" +"Stretch Aspect = **Ignore**: Ignore the aspect ratio when stretching the " +"screen. This means that the original resolution will be stretched to exactly " +"fill the screen, even if it's wider or narrower. This may result in " +"nonuniform stretching: things looking wider or taller than designed." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:123 +msgid "" +"Stretch Aspect = **Keep**: Keep aspect ratio when stretching the screen. " +"This means that the viewport retains its original size regardless of the " +"screen resolution, and black bars will be added to the top/bottom of the " +"screen (\"letterboxing\") or the sides (\"pillarboxing\")." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:129 +msgid "" +"This is a good option if you know the aspect ratio of your target devices in " +"advance, or if you don't want to handle different aspect ratios." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:135 +msgid "" +"Stretch Aspect = **Keep Width**: Keep aspect ratio when stretching the " +"screen. If the screen is wider than the base size, black bars are added at " +"the left and right (pillarboxing). But if the screen is taller than the base " +"resolution, the viewport will be grown in the vertical direction (and more " +"content will be visible to the bottom). You can also think of this as " +"\"Expand Vertically\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:142 +msgid "" +"This is usually the best option for creating GUIs or HUDs that scale, so " +"some controls can be anchored to the bottom (:ref:`doc_size_and_anchors`)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:148 +msgid "" +"Stretch Aspect = **Keep Height**: Keep aspect ratio when stretching the " +"screen. If the the screen is taller than the base size, black bars are added " +"at the top and bottom (letterboxing). But if the screen is wider than the " +"base resolution, the viewport will be grown in the horizontal direction (and " +"more content will be visible to the right). You can also think of this as " +"\"Expand Horizontally\"." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:155 +msgid "" +"This is usually the best option for 2D games that scroll horizontally (like " +"runners or platformers)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:160 +msgid "" +"Stretch Aspect = **Expand**: Keep aspect ratio when stretching the screen, " +"but keep neither the base width nor height. Depending on the screen aspect " +"ratio, the viewport will either be larger in the horizontal direction (if " +"the screen is wider than the base size) or in the vertical direction (if the " +"screen is taller than the original size)." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:170 +msgid "Stretch Shrink" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:172 +msgid "" +"The \"Shrink\" setting allows you to add an extra scaling factor on top of " +"what the \"Stretch\" options above already provide. The default value of 1 " +"means that no scaling occurs." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:176 +msgid "" +"If, for example, you set \"Shrink\" to 4 and leave \"Stretch Mode\" on " +"\"Disabled\", each unit in your scene will correspond to 4×4 pixels on the " +"screen." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:180 +msgid "" +"If \"Stretch Mode\" is set to something other than \"Disabled\", the size of " +"the root viewport is scaled down by the \"Shrink\" factor, and pixels in the " +"output are scaled up by the same amount. This is rarely useful for 2D games, " +"but can be used to increase performance in 3D games by rendering them at a " +"lower resolution." +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:187 +msgid "From scripts" +msgstr "" + +#: ../../docs/tutorials/viewports/multiple_resolutions.rst:189 +msgid "" +"To configure stretching at runtime from a script, use the ``get_tree()." +"set_screen_stretch()`` function (see :ref:`SceneTree." +"set_screen_stretch`)." msgstr "" #: ../../docs/tutorials/shading/index.rst:2 @@ -39998,7 +40442,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:34 #: ../../docs/tutorials/shading/shading_language.rst:650 #: ../../docs/tutorials/shading/shading_language.rst:922 -#: ../../docs/tutorials/shading/shading_language.rst:1082 +#: ../../docs/tutorials/shading/shading_language.rst:1086 msgid "Render Modes" msgstr "" @@ -40734,10 +41178,6 @@ msgid "" "default" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:394 -msgid "Uniforms" -msgstr "" - #: ../../docs/tutorials/shading/shading_language.rst:396 msgid "" "Passing values to shaders is possible. These are global to the whole shader " @@ -41558,7 +41998,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:925 -#: ../../docs/tutorials/shading/shading_language.rst:1085 +#: ../../docs/tutorials/shading/shading_language.rst:1089 msgid "Render Mode" msgstr "" @@ -41783,7 +42223,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:709 #: ../../docs/tutorials/shading/shading_language.rst:945 -#: ../../docs/tutorials/shading/shading_language.rst:1095 +#: ../../docs/tutorials/shading/shading_language.rst:1099 msgid "Vertex Built-Ins" msgstr "" @@ -41849,9 +42289,9 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:802 #: ../../docs/tutorials/shading/shading_language.rst:885 #: ../../docs/tutorials/shading/shading_language.rst:956 -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "in float **TIME**" msgstr "" @@ -41929,7 +42369,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:742 #: ../../docs/tutorials/shading/shading_language.rst:966 #: ../../docs/tutorials/shading/shading_language.rst:1015 -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "out vec4 **COLOR**" msgstr "" @@ -42072,7 +42512,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:808 #: ../../docs/tutorials/shading/shading_language.rst:1005 -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "Fragment coordinate, pixel adjusted." msgstr "" @@ -42116,7 +42556,7 @@ msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:822 #: ../../docs/tutorials/shading/shading_language.rst:1013 -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "in vec2 **UV**" msgstr "" @@ -42133,7 +42573,7 @@ msgid "UV2 that comes from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:826 -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "in vec4 **COLOR**" msgstr "" @@ -42268,7 +42708,7 @@ msgid "Emission color (can go over 1,1,1 for HDR)." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:860 -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "sampler2D **SCREEN_TEXTURE**" msgstr "" @@ -42297,8 +42737,8 @@ msgid "Screen UV coordinate for current pixel." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:866 -#: ../../docs/tutorials/shading/shading_language.rst:1027 -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1029 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "in vec2 **POINT_COORD**" msgstr "" @@ -42315,7 +42755,7 @@ msgid "If written to, values below a certain amount of alpha are discarded." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:872 -#: ../../docs/tutorials/shading/shading_language.rst:1037 +#: ../../docs/tutorials/shading/shading_language.rst:1039 msgid "Light Built-Ins" msgstr "" @@ -42324,7 +42764,7 @@ msgid "Built-in" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:889 -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "in vec3 **NORMAL**" msgstr "" @@ -42470,12 +42910,12 @@ msgid "Instance custom data." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "in bool **AT_LIGHT_PASS**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:960 -#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1033 msgid "True if this is a light pass (for multi-pass light rendering)." msgstr "" @@ -42539,7 +42979,7 @@ msgid "Color from vertex function." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1017 -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "sampler2D **TEXTURE**" msgstr "" @@ -42556,261 +42996,260 @@ msgid "Default 2D normal texture." msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -#: ../../docs/tutorials/shading/shading_language.rst:1054 +#: ../../docs/tutorials/shading/shading_language.rst:1056 msgid "in vec2 **TEXTURE_PIXEL_SIZE**" msgstr "" #: ../../docs/tutorials/shading/shading_language.rst:1021 -msgid "Default 2D texture pixel size." +#: ../../docs/tutorials/shading/shading_language.rst:1056 +msgid "" +"Normalized pixel size of default 2D texture. For a Sprite with a texture of " +"size 64x32px, **TEXTURE_PIXEL_SIZE** = :code:`vec2(1/64, 1/32)`" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "in vec2 **SCREEN_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1023 +#: ../../docs/tutorials/shading/shading_language.rst:1025 msgid "Screen UV for use with SCREEN_TEXTURE." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "in vec2 **SCREEN_PIXEL_SIZE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1025 +#: ../../docs/tutorials/shading/shading_language.rst:1027 msgid "Size of individual pixels. Equal to inverse of resolution." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1027 +#: ../../docs/tutorials/shading/shading_language.rst:1029 msgid "Coordinate for drawing points." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1029 -#: ../../docs/tutorials/shading/shading_language.rst:1060 -#: ../../docs/tutorials/shading/shading_language.rst:1114 +#: ../../docs/tutorials/shading/shading_language.rst:1031 +#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1118 msgid "Global time in seconds." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1033 +#: ../../docs/tutorials/shading/shading_language.rst:1035 msgid "Screen texture, mipmaps contain gaussian blurred versions." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1042 +#: ../../docs/tutorials/shading/shading_language.rst:1044 msgid "in vec2 **POSITION**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1044 +#: ../../docs/tutorials/shading/shading_language.rst:1046 msgid "" "Input Normal. Although this value is passed in, **normal calculation still " "happens outside of this function**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1047 +#: ../../docs/tutorials/shading/shading_language.rst:1049 msgid "UV from vertex function, equivalent to the UV in the fragment function." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1049 +#: ../../docs/tutorials/shading/shading_language.rst:1051 msgid "" "Input Color. This is the output of the fragment function with final " "modulation applied." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1052 +#: ../../docs/tutorials/shading/shading_language.rst:1054 msgid "Current texture in use for CanvasItem." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1054 -msgid "Pixel size for current 2D texture." -msgstr "" - -#: ../../docs/tutorials/shading/shading_language.rst:1056 +#: ../../docs/tutorials/shading/shading_language.rst:1060 msgid "Screen Texture Coordinate (for using with texscreen)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1058 +#: ../../docs/tutorials/shading/shading_language.rst:1062 msgid "Current UV for Point Sprite." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "out vec2 **LIGHT_VEC**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1062 +#: ../../docs/tutorials/shading/shading_language.rst:1066 msgid "" "Vector from light to fragment, can be modified to alter shadow computation." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "out float **LIGHT_HEIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1064 +#: ../../docs/tutorials/shading/shading_language.rst:1068 msgid "Height of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "out vec4 **LIGHT_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1066 +#: ../../docs/tutorials/shading/shading_language.rst:1070 msgid "Color of Light." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "out vec2 **LIGHT_UV**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1068 +#: ../../docs/tutorials/shading/shading_language.rst:1072 msgid "UV for Light texture." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "out vec4 **SHADOW_COLOR**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1070 +#: ../../docs/tutorials/shading/shading_language.rst:1074 msgid "Shadow Color of Light. **(not yet implemented)**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "out vec4 **LIGHT**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1072 +#: ../../docs/tutorials/shading/shading_language.rst:1076 msgid "" "Value from the Light texture. **(shader is ignored if this is not used).** " "Can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1079 +#: ../../docs/tutorials/shading/shading_language.rst:1083 msgid "Accepted render modes and built-ins for **shader_type particles;**." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "**keep_data**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1087 +#: ../../docs/tutorials/shading/shading_language.rst:1091 msgid "Do not clear previous data on restart." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "**disable_force**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1089 +#: ../../docs/tutorials/shading/shading_language.rst:1093 msgid "Disable force." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "**disable_velocity**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1091 +#: ../../docs/tutorials/shading/shading_language.rst:1095 msgid "Disable velocity." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1100 +#: ../../docs/tutorials/shading/shading_language.rst:1104 msgid "Particle color, can be written to." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "out vec3 **VELOCITY**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1102 +#: ../../docs/tutorials/shading/shading_language.rst:1106 msgid "Particle velocity, can be modified." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "out float **MASS**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1104 +#: ../../docs/tutorials/shading/shading_language.rst:1108 msgid "Particle mass, use for attractors (default 1)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "out bool **ACTIVE**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1106 +#: ../../docs/tutorials/shading/shading_language.rst:1110 msgid "Particle is active, can be set to false." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "in bool **RESTART**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1108 +#: ../../docs/tutorials/shading/shading_language.rst:1112 msgid "Set to true when particle must restart (lifetime cycled)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "out vec4 **CUSTOM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1110 +#: ../../docs/tutorials/shading/shading_language.rst:1114 msgid "Custom particle data." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "out mat4 **TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1112 +#: ../../docs/tutorials/shading/shading_language.rst:1116 msgid "Particle transform." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "in float **LIFETIME**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1116 +#: ../../docs/tutorials/shading/shading_language.rst:1120 msgid "Particle lifetime." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "in float **DELTA**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1118 +#: ../../docs/tutorials/shading/shading_language.rst:1122 msgid "Delta process time." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "in uint **NUMBER**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1120 +#: ../../docs/tutorials/shading/shading_language.rst:1124 msgid "Unique number since emission start." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "in int **INDEX**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1122 +#: ../../docs/tutorials/shading/shading_language.rst:1126 msgid "Particle index (from total particles)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "in mat4 **EMISSION_TRANSFORM**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1124 +#: ../../docs/tutorials/shading/shading_language.rst:1128 msgid "Emitter transform (used for non-local systems)." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "in uint **RANDOM_SEED**" msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1126 +#: ../../docs/tutorials/shading/shading_language.rst:1130 msgid "Random seed used as base for random." msgstr "" -#: ../../docs/tutorials/shading/shading_language.rst:1129 +#: ../../docs/tutorials/shading/shading_language.rst:1133 msgid "" "Particle shades only support vertex processing. They are drawn with any " "regular material for CanvasItem or Spatial, depending on whether they are 2D " @@ -44716,6 +45155,1809 @@ msgid "" "optical trickery." msgstr "" +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:4 +msgid "VR Starter Tutorial" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:11 +msgid "" +"This tutorial series will show you how to make a simple VR game/project. The " +"intent of this tutorial is to give you an idea on how to make VR games in " +"Godot." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:14 +msgid "" +"Keep in mind, **one of the most important things when making VR content is " +"getting the scale of your assets correct**! It can take lots of practice and " +"iterations to get this right, but there are a few things you can do to make " +"it easier:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:17 +msgid "" +"In VR, 1 unit is often considered 1 meter. If you design your assets around " +"that standard, you can save yourself a lot of headache." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:18 +msgid "" +"In your 3D model program, see if there is a way to measure and use real " +"world distances. In Blender you can use the MeasureIt add-on, in Maya you " +"can use the Measure Tool." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:19 +msgid "" +"You can make rough models using a tool like Google Blocks, and then refine " +"in another 3D modelling program." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:20 +msgid "" +"Test often, as the assets can look dramatically different in VR then on a " +"flat screen!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:22 +msgid "Throughout the course of this tutorial, we will cover:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:24 +msgid "How to tell Godot to run in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:25 +msgid "How to make a teleportation system for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:26 +msgid "" +"How to make a directional movement system (locomotion) for moving the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:27 +msgid "" +"How to make a :ref:`RigidBody ` based pick up and drop " +"system." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:28 +msgid "How to make various items that can be used in VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:30 +msgid "" +"While this tutorial can be completed by beginners, it is highly advised to " +"complete :ref:`doc_your_first_game`, if you are new to Godot and/or game " +"development and have some experience with making 3D games **before** going " +"through this tutorial series." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:35 +msgid "" +"This tutorial assumes you know have experience working with the Godot " +"editor, have basic programming experience in GDScript, and have basic 3D " +"game development experience." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:38 +msgid "" +"Also, it is assumed you have both a OpenVR ready headset and two OpenVR " +"ready controllers! This tutorial was written using a Windows Mixed Reality " +"headset on Windows 10, so the tutorial is written to work on that. You may " +"need to adjust and/or the code to work with other VR headsets like the " +"Oculus Rift, or the HTC Vive." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:41 +msgid "" +"You can find the start assets for this tutorial here: :download:" +"`VR_Starter_Tutorial_Start.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:43 +msgid "" +"The provided starter assets contain some 3D models, Sounds, and a few scenes " +"already set up and configured for this tutorial." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:47 +msgid "" +"The skybox is created by **CGTuts** and is a ocean HDRI freebie, which you " +"can find here: https://cgi.tutsplus.com/articles/freebie-8-awesome-ocean-" +"hdris--cg-5684" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:51 +msgid "" +"The audio used are from several different sources, all **downloaded from the " +"Sonnis #GameAudioGDC Bundle**. The license for the sound effects is included " +"as a PDF, and you can find at this link: (https://sonniss.com/gdc-bundle-" +"license/). The folders where the audio files are stored have the same name " +"as folders in the bundle." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:55 +msgid "" +"The **OpenVR addon** is created by Bastiaan Olij, and is released under the " +"MIT license, and can be found both on the Godot Asset Library, and here on " +"Github: https://github.com/GodotVR/godot-openvr-asset" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:58 +msgid "" +"Everything else is original and created solely for this tutorial by " +"TwistedTwigleg. They are released under the MIT license, so feel free to use " +"however you see fit!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:60 +msgid "You can find the finished project at the bottom of this page" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:71 +msgid "" +"First, you may notice there is already quite a bit set up. This includes A " +"pre-built level, several instanced scenes placed around, some background " +"music, and several GUI related :ref:`MeshInstances ` " +"nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:74 +msgid "" +"You may notice that the GUI related meshes already have a script attached to " +"them, and this is simply used to show whatever is inside the :ref:`Viewport " +"` on the mesh. Feel free to take a look if you want, but " +"this tutorial will not be going over how to use the :ref:`Viewport " +"` nodes for making 3D GUI :ref:`MeshInstance " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:78 +msgid "" +"The other thing to notice before we jump in to writing the code is how the :" +"ref:`ARVROrigin ` node works. How it works is kind of hard " +"to explain, especially if you have never used VR before, but here is the " +"gist of it: The :ref:`ARVROrigin ` node is the center " +"point of the room. If there is no room scale tracking, then the :ref:" +"`ARVROrigin ` will be directly below the player, but if " +"there is room scale tracking, then the :ref:`ARVROrigin ` " +"will be the center of the tracked room." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:83 +msgid "" +"This is a bit of a simplification, and honestly, I do not know enough about " +"the various different VR headsets and how they work to give a more detailed " +"and complete explanation. The simple way is to look at it like this: The :" +"ref:`ARVROrigin ` is the center of the VR world. If there " +"is room tracking, the player can move away from the center point, the :ref:" +"`ARVROrigin ` node, but only as far as the room scaling " +"tracks." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:87 +msgid "" +"If you select the :ref:`ARVROrigin ` node, you may notice " +"that the world scale is set to ``1.4``. This is because I originally made " +"the world too big, and so I needed to scale the VR player slightly so they " +"better fit the world. As mentioned earlier, keeping the scale relatively " +"constant is very important!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:90 +msgid "" +"Another thing to notice here is how we have everything set up under the :ref:" +"`ARVROrigin ` node. The player camera is a :ref:" +"`ARVRCamera ` that represents the player's head in the " +"game. The :ref:`ARVRCamera ` will be offset by the " +"player's height, and if there is room tracking, then the camera can move " +"around 3D space as well, relative to the :ref:`ARVROrigin " +"`. This is important to note, especially for later when we " +"add teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:94 +msgid "" +"Notice how there is a :ref:`ColorRect ` node called " +"``Movement_Vignette``. This will be a vignette shader that will only be " +"visible when the player is moving. We are going to use the vignette shader " +"to help reduce motion sickness while moving in VR. The reason it is a child " +"of :ref:`ARVROrigin ` is because we want it to easily " +"access the VR controllers." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:98 +msgid "" +"The final thing to note is that there are two :ref:`ARVRController " +"` nodes, and these will represent the left and right " +"controllers in 3D space. A :ref:`ARVRController ` with " +"an ID of ``1`` is the left hand, while a :ref:`ARVRController " +"` with an ID of ``2`` is the right hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:102 +msgid "Starting VR" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:104 +msgid "" +"First, let's get the VR up and going! While ``Game.tscn`` is open, select " +"the ``Game`` node and make a new script called ``Game.gd``. Add the " +"following code:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:121 +msgid "" +"Now, for this to work you will need to have the OpenVR asset from the Godot " +"asset library. The OpenVR asset is included in the starter assets, but there " +"may be newer versions that work better, so I would highly suggest deleting " +"the ``addons`` folder, going to the asset library, searching for ``OpenVR``, " +"and downloading the newest version from Bastiaan-Olij/Mux213!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:125 +msgid "With that done, let's quickly go over what this script does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:127 +msgid "" +"First, we find a VR interface from the ARVR server. We do this because by " +"default Godot does not include any VR interfaces, but rather exposes a API " +"so anyone can make AR/VR interfaces with GDNative/C++. Next, we check to see " +"if a OpenVR interface was found, and then we initialize it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:130 +msgid "" +"Assuming nothing went wrong with initializing, we then turn the main :ref:" +"`Viewport ` into a AR/VR viewport, by setting ``arvr`` to " +"``true``. We also set HDR to ``false``, since in OpenVR you cannot use HDR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:133 +msgid "" +"Then we disable VSync and set the target FPS to ``90`` frames per second. " +"``90`` FPS is what most VR headsets run at, and since the game will both " +"display on the VR headset and on the computer's monitor, we want to disable " +"VSync and set the target FPS manually so the computer's monitor does not " +"drag the VR display down to 60 FPS." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:136 +msgid "" +"One thing to notice as well is that the physics FPS is also set to ``90``! " +"This makes the physics run at the same frame rate as the display, which " +"makes things look smoother in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:141 +msgid "" +"With that done, go ahead and give the game a try! If everything goes well, " +"you will now be able to look around the world! If you have a VR headset with " +"room tracking, you will be able to move around as far as the room tracking " +"allows." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:145 +msgid "Coding the controllers" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:147 +msgid "" +"While perhaps interesting if we were making a VR film, we really want to do " +"more than stand around and look. Currently we cannot move outside of the " +"room tracking boundaries (assuming your VR headset has room tracking) and we " +"cannot interact with anything! Let's change that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:150 +msgid "" +"You may have noticed that you have a pair of green and black hands following " +"the controllers. Now let's write the code for those controllers, which will " +"allow the player to teleport around the world and allow the player to grab " +"and release :ref:`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:153 +msgid "Open either ``Left_Controller.tscn`` or ``Right_Controller.tscn``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:155 +msgid "" +"Feel free to look at how the scene is set up. There is only a couple things " +"of note to point out." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:157 +msgid "" +"First, notice how there is a couple :ref:`Raycast ` nodes. We " +"will be using one :ref:`Raycast ` to teleport around the game " +"world (``Raycast``) and we will use the other for picking up objects " +"(``GrabCast``) if the player is using :ref:`Raycast ` nodes " +"to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:160 +msgid "" +"The other thing to note is how there is an :ref:`Area `, simply " +"called ``Area``, that is a small sphere in the palm of the hand. This will " +"be used to detect objects the player can pick up with that hand if the " +"player is using :ref:`Area ` nodes to pick up objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:163 +msgid "" +"We also have a larger :ref:`Area ` called ``Sleep_Area``, which " +"will simply be used to wake :ref:`RigidBody ` nodes when " +"the hands get close." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:165 +msgid "" +"Select the root node, either ``Left_Controller`` or ``Right_Controller`` " +"depending on which scene you chose, and create a new script called " +"``VR_Controller.gd``. Add the following to ``VR_Controller.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:418 +msgid "" +"This is quite a bit of code (``245`` lines to be exact) of code to go " +"through, so let's break it down bit by bit. First, let's start with the " +"class variables, which are variables outside of any/all functions." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:421 +msgid "" +"``controller_velocity`` : The velocity the controller is moving at. We will " +"calculate this by changes in position every physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:422 +msgid "" +"``prior_controller_position`` : The controller's previous position. We will " +"use this to calculate the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:423 +msgid "" +"``prior_controller_velocities`` : The last ``30`` calculated velocities (1/3 " +"of a second worth of velocities, assuming the game is running at ``90`` FPS)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:424 +msgid "" +"``held_object`` : The currently held object, a :ref:`RigidBody " +"`, if there is one." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:425 +msgid "" +"``held_object_data`` : The data of the currently held object, used to reset " +"the object when it is no longer being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:426 +msgid "``grab_area`` : The :ref:`Area ` node used to grab objects." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:427 +msgid "``grab_pos_node`` : The position where held objects stay." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:428 +msgid "" +"``hand_mesh`` : The hand mesh, used to represent the player's hand when they " +"are not holding anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:429 +msgid "" +"``teleport_pos`` : The position the teleport :ref:`Raycast ` " +"is aimed at." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:430 +msgid "``teleport_mesh`` : The meshed used to represent the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:431 +msgid "" +"``teleport_button_down`` : A variable for tracking whether the teleport " +"button is being held down or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:432 +msgid "" +"``teleport_raycast`` : The teleport :ref:`Raycast ` node, " +"used for calculating the teleportation position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:433 +msgid "" +"``CONTROLLER_DEADZONE`` : The dead zone for both the trackpad and the " +"joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:434 +msgid "" +"``MOVEMENT_SPEED`` : The speed the player moves at when moving using the " +"trackpad and/or the joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:435 +msgid "" +"``directional_movement`` : A boolean to track whether the player is moving " +"using this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:439 +msgid "Next, let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:441 +msgid "" +"First we get the teleport :ref:`Raycast ` node and assign it " +"to ``teleport_raycast``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:443 +msgid "" +"Next we get the teleport mesh, and notice how we are getting it from ``Game/" +"Teleport_Mesh`` using ``get_tree().root``. This is because we need the " +"teleport mesh to be separate from the controller, so moving and rotating the " +"controller does not effect the position and rotation of the teleporation " +"mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:446 +msgid "" +"Then we get the grab area, grab :ref:`Raycast `, and position " +"node and assign them to the proper variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:448 +msgid "" +"We set the default grab mode to ``AREA`` so it uses the :ref:`Area " +"` node to grab objects by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:450 +msgid "" +"Then we connect the ``body_entered`` and ``body_exited`` signals from the " +"sleep area node, we get the hand mesh and assign it the proper variable, and " +"finally we connect the ``button_pressed`` and ``button_released`` signals " +"from the :ref:`ARVRController `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:457 +msgid "" +"First we check to see if the teleportation button is down or not. If the " +"teleportation button is down, we then force the teleportation :ref:`Raycast " +"` to update, which will give us frame perfect collision " +"detection. We then check to see if the :ref:`Raycast ` is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:460 +msgid "" +"Next, we check to see if the collision body the :ref:`Raycast " +"` is colliding with is a :ref:`StaticBody " +"`. We do this to ensures the player can only teleport on :" +"ref:`StaticBody ` nodes. We then check to see if the ``Y`` " +"value returned by the :ref:`Raycast `'s " +"``get_collision_normal`` function is more than ``0.85``, which is mostly " +"pointing straight up. This allows the player only to teleport on fairly flat " +"faces pointing upwards." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:464 +msgid "" +"If all those checks for the teleport :ref:`Raycast ` return " +"true, we then set ``teleport_pos`` to the collision point, and we move the " +"teleportation mesh to ``teleport_pos``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:467 +msgid "" +"The next thing we check is to see if the :ref:`ARVRController " +"` is active or not. If the :ref:`ARVRController " +"` is active, then that means there is a controller and " +"it is being tracked. If the controller is active, we then reset " +"``controller_velocity`` to a empty :ref:`Vector3 `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:470 +msgid "" +"We then add all of the prior velocity calculations in " +"``prior_controller_velocities`` to ``controller_velocity``. By using the " +"prior calculations, we get a smoother throwing/catching experience, though " +"it is not perfect. We want to get the average of these velocities, as " +"otherwise we'd get crazy high velocity numbers that are not realistic." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:473 +msgid "" +"Next we calculate the velocity from the position the controller currently " +"is, from the position the controller was at. We can use this difference in " +"position to help track the controller's velocity." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:476 +msgid "" +"We then add the velocity from the controller this physics frame and the last " +"physics frame to ``controller_velocity``. We then update " +"``prior_controller_position`` to the current position, so we can use it in " +"the calculations in the velocity next physics frame." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:479 +msgid "" +"The way we are calculating velocity is not perfect by any means, since it " +"relies on a consistent amount of frames per second. Ideally we would be able " +"to find the velocity directly from the VR controller but currently in OpenVR " +"there is not way to access the controller's velocity. We can get pretty " +"close to the real velocity by comparing positions between frames though, and " +"this will work just fine for this project." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:483 +msgid "" +"Then we check to see if we have more than ``30`` stored velocities (more " +"than a third of a second). If there are more than ``30``, we remove the " +"oldest velocity from ``prior_controller_velocities``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:487 +msgid "" +"Next we check to see if there is a held object. If there is, we update the " +"position and rotation of the held object to the position and rotation of " +"``grab_pos_node``. Because of how scale works, we need to temporarily store " +"the scale and then reset the scale once we have updated the transform, as " +"otherwise the scale will always be the same as the controller, which will " +"break the immersion if the player grabs a scaled object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:492 +msgid "" +"The last thing we are going to do in ``_physics_process`` is move the player " +"if they are moving the trackpad/joystick on the VR controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:494 +msgid "" +"First, we convert the axis values into :ref:`Vector2 ` " +"variables so we can process them. We invert the X axis so moving the " +"trackpad/joystick left will move the player left." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:497 +msgid "" +"Depending on your VR controller and OS, you may need to change the code so " +"it gets the proper axis values!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:499 +msgid "" +"Next we account for dead zones on both the trackpad and the joystick. The " +"code for doing this is adapted from the link below, and I would highly " +"recommend looking at it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:501 +msgid "" +"You can find a great article explaining joystick deads zone here: http://www." +"third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:503 +msgid "" +"One thing to note is how large we are making the dead zones. The reason we " +"are using such large dead zones is to the player cannot move themselves " +"accidentaly by placing their finger on the center of the touchpad/joystick, " +"which make players feel motion sick if they are not expecting it." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:506 +msgid "" +"Next, we get the forward and right directional vectors from the VR camera. " +"We need these so we can move the player forward/backwards and right/left " +"based on where they are currently looking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:509 +msgid "" +"Then we calculate how much the player will be moving by adding both the " +"trackpad and the joystick vectors together and normalizing them." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:511 +msgid "" +"Next we calculate how far the player will go forwards/backwards and right/" +"left by multiplying the VR camera's directional vectors by the combined " +"trackpad/joystick vector." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:513 +msgid "" +"We then remove movement on the Y axis so the player cannot fly/fall simply " +"by moving using the trackpad/joystick." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:515 +msgid "" +"And finally, we move the player if there is any movement forwards/backwards " +"or right/left. If we are moving the player, we set ``directional_movement`` " +"accordingly." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:519 +msgid "Now, let's look at ``button_pressed``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:522 +msgid "" +"If the button pressed is button ``15``, which for the Windows Mixed Reality " +"controllers is the trigger button, we will interact with the held object " +"assuming the controller is holding one, and if the player is not holding a " +"object, we will try to start teleporting." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:525 +msgid "" +"If the controller is holding a object, and the held object has a method/" +"function called ``interact``, we call the ``interact`` function on the held " +"object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:528 +msgid "" +"If the controller is not holding a object, we then check to make sure the " +"teleportation mesh is not visible. This check ensure the player cannot " +"teleport cannot teleport with both hands/controllers at the same time. If " +"the teleportation mesh is not visible, we set ``teleport_button_down`` to " +"``true``, make ``teleport_mesh`` visible, and make the teleportation raycast " +"visible. This makes it where the teleportation mesh will follow the :ref:" +"`Raycast ` coming from the pointer finger of the hand." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:534 +msgid "" +"If the button pressed is button ``2``, which for the Windows Mixed Reality " +"controllers is the grab/grip button, we will grab/throw a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:536 +msgid "" +"First, we make sure the player is not trying to teleport, as we do not want " +"the player to be able to grab something while in the middle of trying to " +"teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:538 +msgid "" +"Then we check to see if the controller is already holding a object or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:540 +msgid "" +"If the controller is not holding a object, we check to see which grab mode " +"the player is using." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:542 +msgid "" +"If the player is using the ``AREA`` grab mode, we then get all of the bodies " +"overlapping the grab :ref:`Area `. We go through all of the " +"bodies in the grab :ref:`Area ` and see if there is a :ref:" +"`RigidBody `. We also check to make sure any :ref:" +"`RigidBody ` nodes in the :ref:`Area ` do not " +"have a variable called ``NO_PICKUP``, since we do not want to be able to " +"pick up nodes with that variable." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:546 +msgid "" +"Assuming there is a :ref:`RigidBody ` node inside the grab :" +"ref:`Area ` that does not have a variable called ``NO_PICKUP``, " +"we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:549 +msgid "" +"If the player is using the ``RAYCAST`` grab mode, we first force the :ref:" +"`Raycast ` to update. We then check to see if the :ref:" +"`Raycast ` is colliding with something." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:552 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we then " +"check to see if what is colliding with is a :ref:`RigidBody " +"`, and that it does not have a variable called " +"``NO_PICKUP``. If the :ref:`Raycast ` is colliding with a :" +"ref:`RigidBody `, and it does not have a variable called " +"``NO_PICKUP``, we assign it to ``rigid_body`` for additional processing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:557 +msgid "" +"If ``rigid_body`` is not ``null``, meaning we found a :ref:`RigidBody " +"` in the grab :ref:`Area `, we assign " +"``held_object`` to it. Then we store the now held :ref:`RigidBody " +"`'s information in ``held_object_data``. We are storing " +"the :ref:`RigidBody ` mode, layer, and mask so later when " +"we drop it, we can reset all of those variables back to what they were " +"before we picked up the :ref:`RigidBody `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:561 +msgid "" +"We then set the held object's :ref:`RigidBody ` mode to " +"``MODE_STATIC`` and set the collision layer and mask to ``0`` so it cannot " +"collide with any other physic bodies." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:564 +msgid "" +"We make the hand mesh invisible so it does not get in the way of the object " +"we are holding (and also because I did not feel like animating the hand :" +"P ). We also make the grab :ref:`Raycast ` invisible so the " +"mesh used for showing the :ref:`Raycast ` is no longer " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:567 +msgid "" +"If the :ref:`RigidBody ` we picked up has the ``picked_up`` " +"method/function, we call it. If the :ref:`RigidBody ` we " +"picked up has a variable called ``controller``, we set it to this controller." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:571 +msgid "" +"If the controller is not holding a object, and the button pressed is ``2``, " +"we want to drop/throw the held object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:573 +msgid "" +"First, we set the held :ref:`RigidBody `'s mode, layer, and " +"mask back to what they were when we picked the object up. We then apply a " +"impulse to the held object, using the controller's velocity as the force." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:576 +msgid "" +"If the previously held :ref:`RigidBody ` has a function " +"called ``dropped``, we call it. If the :ref:`RigidBody ` " +"has a variable called ``controller`` we set it to ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:579 +msgid "" +"Then we set ``held_object`` to ``null``, since we are no longer holding any " +"objects, and we make the hand mesh visible again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:581 +msgid "" +"If we are using the ``RAYCAST`` grab mode, we make the :ref:`Raycast " +"` visible so we can see the mesh used for showing the grab :" +"ref:`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:584 +msgid "" +"Finally, regardless of whether we are grabbing a object or releasing it, we " +"play the sound loaded into ``AudioStreamPlayer3D``, which is a pick-up/drop " +"noise." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:587 +msgid "" +"The last thing we are doing in ``button_pressed`` is checking to see if the " +"button pressed is ``1``, which for the Windows Mixed Reality controllers is " +"the menu button." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:589 +msgid "" +"If the menu button is pressed, we change grab modes, and set the visibility " +"of the grab :ref:`Raycast ` so it is only visible when using " +"``RAYCAST`` as the grab mode." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:594 +msgid "Let's look at ``button_released`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:596 +msgid "" +"If the button released is button ``15``, the trigger, then we potentially " +"want to teleport." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:598 +msgid "" +"First, we check to see if ``teleport_button_down`` is ``true``. If it is, " +"that means the player is intending to teleport, while if it is ``false``, " +"the player has simply released the trigger while holding a object." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:601 +msgid "" +"We then check to see if this controller has a teleport position, and we " +"check to make sure the teleport mesh is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:603 +msgid "" +"If both of those conditions are ``true``, we then calculate the offset the :" +"ref:`ARVRCamera ` has from the :ref:`ARVROrigin " +"`. We do this because of how :ref:`ARVRCamera " +"` and :ref:`ARVROrigin ` work with room " +"scale tracking." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:606 +msgid "" +"Because we want to teleport the player in their current position to the " +"teleport position, and remember because of room scale tracking their current " +"position can be offset from the origin, we have to figure out that offset so " +"when we teleport we can remove it so that player's current position is " +"teleported to the teleport position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:609 +msgid "" +"We set the Y value of the camera_offset to zero because we do not want to " +"account for offsets in the player's height." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:611 +msgid "" +"Then we teleport the :ref:`ARVROrigin ` to the teleport " +"position, applying the camera offset." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:613 +msgid "" +"Regardless of whether we teleported or not, we reset all of the teleport " +"related variables so the controller has to get new ones before teleporting " +"again." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:617 +msgid "" +"Finally, let's look at ``sleep_area_entered`` and ``sleep_area_exited``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:619 +msgid "" +"When a body enters or exists the sleep area, we check to see if it has a " +"variable called ``can_sleep``. If it does, we then set it to ``false`` and " +"wake the body if it has entered the sleep area, while if it has exited we " +"set it to ``true`` so the :ref:`RigidBody ` nodes can sleep " +"(and so we save some performance!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:624 +msgid "" +"Okay, phew! That was a lot of code! Add the same script, ``VR_Controller." +"gd`` to the other controller so both controllers have the same script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:626 +msgid "" +"Now go ahead and try the game again, and you should find you can teleport " +"around by pressing the touch pad, and can grab and throw objects using the " +"grab/grip buttons." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:629 +msgid "" +"Now, you may want to try moving using the trackpads and/or joysticks, but " +"**it may make you motion sick!**" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:631 +msgid "" +"One of the main reasons this can make you feel motion sick is because your " +"vision tells you that you are moving, while your body is not moving. This " +"conflict of signals makes the body feel sick, so lets fix it!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:635 +msgid "Reducing motion sickness" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:637 +msgid "" +"There are plenty of ways to reduce motion sickness in VR, and there is no " +"one perfect way to reduce motion sickness. See: https://developer.oculus.com/" +"design/latest/concepts/bp-locomotion/ for more information on how to " +"implement locomotion, and how to reduce motion sickness." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:641 +msgid "" +"To help reduce motion sickness while moving, we are going to add a vignette " +"effect that will only be visible while the player moves." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:643 +msgid "" +"Open up ``Movement_Vignette.tscn``, which you can find in the ``Scenes`` " +"folder. Notice how it is just a :ref:`ColorRect ` node with " +"a custom shader. Feel free to look at the custom shader if you want, it is " +"just a slightly modified version of the vignette shader you can find in the " +"Godot demo repository." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:646 +msgid "" +"With ``Movement_Vignette`` selected, make a new script called " +"``Movement_Vignette.gd``. Add the following code to ``Movement_Vignette.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:682 +msgid "" +"Because this script is fairly simple, let's quickly go over what it does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:684 +msgid "" +"In ``_ready``, we wait for four frames. We do this to ensure the VR " +"interface is ready and going." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:686 +msgid "" +"Next, we get the current VR interface, and resize the :ref:`ColorRect " +"` node's size and position so that it covers the entire " +"view in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:688 +msgid "" +"Then we get the left and right controllers, assigning them to " +"``controller_one`` and ``controller_two``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:690 +msgid "We then make the vignette invisible by default." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:692 +msgid "" +"In ``_process`` we check to see if either of the controllers are moving the " +"player by checking ``directional_movement``. If either controller is moving " +"the player, we make the vignette visible, while if neither controller is " +"moving the player, we make the vignette invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:697 +msgid "" +"With that done, go ahead and try moving around with the joystick and/or the " +"trackpad. You should find it is much less motion sickness inducing than " +"before!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:699 +msgid "" +"Let's add some special :ref:`RigidBody ` nodes we can " +"interact with next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:702 +msgid "Adding destroyable targets" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:704 +msgid "" +"First, let's start by making some targets we will destroy in various " +"different ways with various different special :ref:`RigidBody " +"` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:706 +msgid "" +"Open up ``Sphere_Target.tscn``, which you can find in the ``Scenes`` folder. " +"``Sphere.tscn`` is just a :ref:`StaticBody ` with a :ref:" +"`CollisionShape `, a mesh, and a audio player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:709 +msgid "" +"Select the ``Sphere_Target`` root node, the :ref:`StaticBody " +"` node, and make a new script called ``Sphere_Target.gd``. " +"Add the following to ``Sphere_Target.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:756 +msgid "Let's go over how this script works, starting with the class variables." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:758 +msgid "``destroyed`` : A variable to track if this target is destroyed or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:759 +msgid "" +"``destroyed_timer`` : A variable to track how long the target has been " +"destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:760 +msgid "" +"``DESTROY_WAIT_TIME`` : A constant to tell the sphere target how long to " +"wait before destroying/deleting itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:761 +msgid "``health`` : The amount of health the target has." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:762 +msgid "" +"``RIGID_BODY_TARGET`` : The target broken into several smaller :ref:" +"`RigidBody ` nodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:766 +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:918 +msgid "Let's go over ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:768 +msgid "" +"All we are doing in ``_ready`` is setting ``_physics_process`` to ``false``. " +"This is because we will only use ``_physics_process`` for destroying the " +"target, so we do not want to call it until the target is broken." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:773 +msgid "Next, let's go over ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:775 +msgid "" +"First we add time to ``destroyed_timer``. Then we check to see if enough " +"time has passed and we can destroy the target. If enough time has passed, we " +"free/destroy the target using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:780 +msgid "Finally, let's go over ``damage``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:782 +msgid "First, we check to make sure the target has not already been destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:784 +msgid "" +"Then, we remove however much damage the target has taken from the target's " +"health." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:786 +msgid "" +"If the target has zero or less health, then it has taken enough damage to " +"break." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:788 +msgid "" +"First, we disable the collision shape and make the whole target mesh " +"invisible. Next, we spawn/instance the :ref:`RigidBody ` " +"version of the target, and instance it at this target's position." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:791 +msgid "" +"Then we set ``destroyed`` to ``true`` and start processing " +"``_physics_process``. Finally, we play a sound, and remove a sphere from " +"``Game.gd`` by calling ``remove_sphere``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:797 +msgid "" +"Now, you may have noticed we are calling a function in ``Game.gd`` we have " +"not made yet, so let's fix that!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:799 +msgid "" +"First, open up ``Game.gd`` and add the following additional class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:806 +msgid "``spheres_left`` : The amount of sphere targets left in the game world." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:807 +msgid "``sphere_ui`` : A reference to the sphere UI. We will use this later!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:809 +msgid "" +"Next, we need to add the ``remove_sphere`` function. Add the following to " +"``Game.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:819 +msgid "What this function does is it removes one from ``spheres_left``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:821 +msgid "" +"Then it checks to see if ``sphere_ui`` is not null, and if it is not, then " +"it calls it's ``update_ui`` function, passing in the amount of sphere's " +"left. We'll add the UI code later in this part." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:824 +msgid "Now that we have destroyable targets, we need a way to destroy them!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:827 +msgid "Adding a pistol" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:829 +msgid "Okay, let's add a simple pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:831 +msgid "Open up ``Pistol.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:833 +#, fuzzy +msgid "There is a few things to note here." +msgstr "Godot 沒有使用限制" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:835 +msgid "" +"The first thing to note is how everything is rotated. This is to make the " +"pistol rotate correctly when the player grabs it. The other thing to notice " +"is how there is a laser sight mesh, and a flash mesh, both of these do what " +"you'd expect: act as a laser pointer and act as a muzzle flash respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:838 +msgid "" +"The other thing to notice is how there is a :ref:`Raycast ` " +"node at the end of the pistol. This is what we will be using to calculate " +"where the bullets impact." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:840 +msgid "" +"Now that we have looked at the scene, let's write the code. Select the " +"``Pistol`` root node, the :ref:`RigidBody ` node, and make " +"a new script called ``Pistol.gd``. Add the following code to ``Pistol.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:909 +msgid "``flash_mesh`` : The mesh used to make the muzzle flash." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:910 +msgid "``FLASH_TIME`` : The length of time the muzzle flash is visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:911 +msgid "" +"``flash_timer``: A variable to track how long the muzzle flash has been " +"visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:912 +msgid "``laser_sight_mesh``: A long rectangular mesh used for the laser sight." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:913 +msgid "``raycast``: The raycast node used for the pistol firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:914 +msgid "``BULLET_DAMAGE``: The amount of damage a single bullet does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:920 +msgid "" +"All we are doing here is getting the nodes and assigning them to the proper " +"variables. We also make sure the flash and laser sight meshes are invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:925 +msgid "Next, let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:927 +msgid "" +"First, we check to see if the flash is visible. We do this by checking to " +"see if ``flash_timer`` is more than zero. This is because ``flash_timer`` " +"will be a inverted timer, a timer that counts down instead of counting up." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:930 +msgid "" +"If ``flash_timer`` is more than zero, we remove ``delta`` from it and check " +"to see if it is equal to zero or less. If it is, we make the flash mesh " +"invisible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:933 +msgid "" +"This makes it where the flash mesh becomes invisible after ``FLASH_TIME`` " +"many seconds has gone by." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:937 +msgid "" +"Now let's look at ``interact``, which is called when the trigger button on " +"the VR controller is pressed and the pistol is being held." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:939 +msgid "" +"First, we check to see if the flash timer is less than or equal to zero. " +"This check makes it where we cannot fire when the flash is visible, limiting " +"how many bullets the pistol can fire." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:942 +msgid "" +"If we can fire, we reset ``flash_timer`` by setting it to ``FLASH_TIME``, " +"and we make the flash mesh visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:944 +msgid "" +"We then update the :ref:`Raycast ` and check to see if it is " +"colliding with anything." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:946 +msgid "" +"If the :ref:`Raycast ` is colliding with something, we get " +"the collider. We check to see if the collider has the ``damage`` function, " +"and if it does we call it. If it does not, we then check to see if the " +"collider has the ``apply_impulse`` function, and if it does, we call it " +"after calculating the direction from the :ref:`Raycast ` to " +"the collider." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:950 +msgid "" +"Finally, regardless of whether the pistol hit something or not, we play the " +"pistol firing sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:954 +msgid "" +"Finally, let's look at ``picked_up`` and ``dropped``, which are called when " +"the pistol is picked up and dropped respectively." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:956 +msgid "" +"All we are doing in these functions is making the laser pointer visible when " +"the pistol is picked up, and making it invisible when the pistol is dropped." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:962 +msgid "" +"With that done, go ahead and give the game a try! If you climb up the stairs " +"and grab the pistols, you should be able to fire at the spheres and they " +"will break!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:965 +msgid "Adding a shotgun" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:967 +msgid "" +"Let's add a different type of shooting :ref:`RigidBody `: A " +"shotgun. This is fairly simple to do, and almost everything is the same as " +"the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:969 +msgid "" +"Open up ``Shotgun.tscn``, which you can find in ``Scenes``. Notice how " +"everything is more or less the same, but instead of a single :ref:`Raycast " +"`, there are five, and there is no laser pointer. This is " +"because a shotgun generally fires in a cone shape, and so we are going to " +"emulate that by having several :ref:`Raycast ` nodes, all " +"rotated randomly in a cone shape, and for fun I removed the laser pointer so " +"the player has to aim without knowing for sure where the shotgun is pointing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:974 +msgid "" +"Alright, select the ``Shotgun`` root node, the :ref:`RigidBody " +"` and make a new script called ``Shotgun.gd``. Add the " +"following to ``Shotgun.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1034 +msgid "" +"You may have noticed this is almost exactly the same as the pistol, and " +"indeed it is, so let's only go over what has changed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1036 +msgid "" +"``raycasts``: The node that holds all of the five :ref:`Raycast " +"` nodes used for the shotgun's firing." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1038 +msgid "" +"In ``_ready``, we get the ``Raycasts`` node, instead of just a single :ref:" +"`Raycast `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1040 +msgid "" +"The only other change, besides there being nothing in ``picked_up`` and " +"``dropped`` is in ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1042 +msgid "" +"Now we go through each :ref:`Raycast ` in ``raycasts``. We " +"then rotate it on the X and Z axis, making within a ``10`` to ``-10`` cone. " +"From there, we process each :ref:`Raycast ` like we did the " +"single :ref:`Raycast ` in the pistol, nothing changed at all, " +"we are just doing it five times, once for each :ref:`Raycast " +"` in ``raycasts``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1048 +msgid "" +"Now you can find and fire the shotgun too! The shotgun is located around the " +"back behind one of the walls (not in the building though!)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1051 +msgid "Adding a bomb" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1053 +msgid "" +"While both of those are well and good, let's add something we can throw " +"next! Let's add a bomb!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1055 +msgid "Open up ``Bomb.tscn``, which you will find in the ``Scenes`` folder." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1057 +msgid "" +"First, notice how there is a rather large :ref:`Area ` node. " +"This is the explosion radius for the bomb. Anything within this :ref:`Area " +"` will be effected by the explosion when the bomb explodes." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1060 +msgid "" +"The other thing to note is how there are two sets of :ref:`Particles " +"`: One for smoke coming out of the fuse, and another for " +"the explosion itself. Feel free to take a look at the :ref:`Particles " +"` nodes if you want!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1063 +msgid "" +"The only thing to notice his how long the explosion :ref:`Particles " +"` node will last, their lifetime, which is 0.75 seconds. We " +"need to know this so we can time the removal of the bomb with the end of the " +"explosion :ref:`Particles `." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1066 +msgid "" +"Alright, now let's write the code for the bomb. Select the ``Bomb`` :ref:" +"`RigidBody ` node and make a new script called ``Bomb.gd``. " +"Add the following code to ``Bomb.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1157 +msgid "" +"Let's go through what this script does, starting with the class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1159 +msgid "" +"``bomb_mesh``: The :ref:`MeshInstance ` used for the " +"bomb mesh." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1160 +msgid "``FUSE_TIME``: The length of time the fuse burns for." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1161 +msgid "" +"``fuse_timer``: A variable for tracking how long the fuse has been burning." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1162 +msgid "" +"``explosion_area``: The :ref:`Area ` node used for detecting " +"what nodes are inside the explosion." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1163 +msgid "``EXPLOSION_DAMAGE``: The amount of damage the explosion does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1164 +msgid "" +"``EXPLOSION_TIME``: The length of time the explosion :ref:`Particles " +"` take (you can calculate this number by multiplying the " +"particles ``lifetime`` by it's ``speed scale``)" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1165 +msgid "" +"``explosion_timer``: A variable for tracking how long the explosion has " +"lasted." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1166 +msgid "``explode``: A boolean for tracking whether the bomb has exploded." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1167 +msgid "``fuse_particles``: The fuse :ref:`Particles ` node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1168 +msgid "" +"``explosion_particles``: The explosion :ref:`Particles ` " +"node." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1169 +msgid "" +"``controller``: The controller that is currently holding the bomb, if there " +"is one. This is set by the controller, so we do not need to check anything " +"outside of checking if it is ``null``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1173 +msgid "Let's go through ``_ready``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1175 +msgid "" +"First, we get all of the nodes and assign them to the proper variables for " +"later use." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1177 +msgid "" +"Then, we make sure ``_physics_process`` is not going to be called. We do " +"this since we will be using ``_physics_process`` only for the fuse and for " +"destroying the bomb, so we do not want to trigger that early, we only want " +"the fuse to start when the player interacts while holding a bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1182 +msgid "Now let's look at ``_physics_process``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1184 +msgid "" +"First we check to see if ``fuse_timer`` is less than ``FUSE_TIME``. If " +"``fuse_timer`` is less than ``FUSE_TIME``, then the bomb must be burning " +"down the fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1186 +msgid "" +"We then add time to ``fuser_timer``, and check to see if the bomb has waited " +"long enough and has burned through the entire fuse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1188 +msgid "" +"If the bomb has waited long enough, then we need to explode the bomb. We do " +"this first by stopping the smoke :ref:`Particles ` from " +"emitting, and making the explosion :ref:`Particles ` emit. " +"We also hide the bomb mesh so it is no longer visible." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1191 +msgid "" +"Next, we make the set the collision layer and mask to zero, and set the :ref:" +"`RigidBody ` mode to static. This makes it where the now " +"exploded bomb cannot interact with the physics world, and so it will stay in " +"place." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1194 +msgid "" +"Then we go through everything inside the explosion :ref:`Area `. " +"We make sure the bodies inside the explosion :ref:`Area ` are " +"not the bomb itself, since we do not want to explode the bomb with itself. " +"We then check to see if the bodies have the ``damage`` method/function, and " +"if it does we call that, while if it does not we check to see if it has the " +"``apply_impulse`` method/function, and call that instead." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1198 +msgid "" +"Then we set ``explode`` to true since the bomb has exploded, and we play a " +"sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1201 +msgid "" +"Next we check to see if the bomb has exploded, as we need to wait until the " +"explosion :ref:`Particles ` are done." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1203 +msgid "" +"If the bomb has exploded, we add time to ``explosion_timer``. We then check " +"to see if the explosion :ref:`Particles ` are done. If they " +"are, we set the explosion :ref:`Area `'s monitoring property to " +"``false`` to ensure we do not get any bugs in the debugger, we make the " +"controller drop the bomb if it is holding onto it, we make the grab :ref:" +"`Raycast ` visible if the grab mode is ``RAYCAST``, and we " +"free/destroy the bomb using ``queue_free``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1209 +msgid "Finally, let's look at ``interact``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1211 +msgid "" +"All we are doing here is making it where ``_physics_process`` will be " +"called, which will start the fuse. We also make the fuse :ref:`Particles " +"` start emitting, so smoke comes out the top of the bomb." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1216 +msgid "" +"With that done, the bombs are ready to go! You can find them in the orange " +"building. Because of how we are calculating velocity, it is easiest to throw " +"bombs in a trusting like motion as opposed to a more natural throwing like " +"motion. The smooth curve of a throwing like motion is harder to track, and " +"the because of how we are tracking velocity it does not always work." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1221 +msgid "Adding a sword" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1223 +msgid "Finally, let's add a sword so we can slice through things!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1225 +msgid "Open up ``Sword.tscn``, which you will find in ``Scenes``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1227 +msgid "" +"There is not a whole lot to note here, but there is just one thing, and that " +"is how the length of the blade of the sword is broken into several small :" +"ref:`Area ` nodes. This is because we need to roughly know where " +"on the blade the sword collided, and this is the easiest (and only) way I " +"could figure out how to do this." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1230 +msgid "" +"If you know how to find the point where a :ref:`Area ` and a :" +"ref:`CollisionObject ` meet, please let me know and/" +"or make a PR on the Godot documentation! This method of using several small :" +"ref:`Area ` nodes works okay, but it is not ideal." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1233 +msgid "" +"Other than that, there really is not much of note, so let's write the code. " +"Select the ``Sword`` root node, the :ref:`RigidBody ` and " +"make a new script called ``Sword.gd``. Add the following code to ``Sword." +"gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1297 +msgid "" +"Let's go over what this script does, starting with the two class variables:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1299 +msgid "``SWORD_DAMAGE`` : The amount of damage a single sword slice does." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1300 +msgid "" +"``controller`` : The controller that is holding the sword, if there is one. " +"This is set by the controller, so we do not need to set it here in ``Sword." +"gd``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1304 +msgid "Let's go over ``_ready`` next." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1306 +msgid "" +"All we are doing here is connecting each of the :ref:`Area ` " +"nodes ``body_entered`` signal to the ``body_entered_sword`` function, " +"passing in a additional argument which will be the number of the damage :ref:" +"`Area `, so we can figure out where on the sword the body " +"collided." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1311 +msgid "Now let's go over ``body_entered_sword``." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1313 +msgid "First, we make sure the body the sword has collided with is not itself." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1315 +msgid "" +"Then we figure out which part of the sword the body collided with, using the " +"passed in number." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1317 +msgid "" +"Next, we check to see if the body the sword collided with has the ``damage`` " +"function, and if it does, we call it and play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1319 +msgid "" +"If it does not have the damage function, we then check to see if it has the " +"``apply_impulse`` function. If it does, we then calculation the direction " +"from the sword part the body collided with to the body. We then check to see " +"if the sword is being held or not." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1322 +msgid "" +"If the sword is not being held, we use the :ref:`RigidBody " +"`'s velocity as the force in ``apply_impulse``, while if " +"the sword is being held, we use the controller's velocity as the force in " +"the impulse." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1325 +msgid "Finally, we play a sound." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1331 +msgid "" +"With that done, you can now slice through the targets! You can find the " +"sword in the corner in between the shotgun and the pistol." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1334 +msgid "Updating the target UI" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1336 +msgid "Okay, let's update the UI as the sphere targets are destroyed." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1338 +msgid "" +"Open up ``Game.tscn`` and then expand the ``GUI`` :ref:`MeshInstance " +"`. From there, expand the ``GUI`` :ref:`Viewport " +"` node and then select the ``base_control`` node. Add a new " +"script called ``Base_Control``, and add the following:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1358 +msgid "Let's go over what this script does quickly, as it is fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1360 +msgid "" +"First, in ``_ready``, we get the :ref:`Label ` that shows how " +"many spheres are left and assign it to the ``sphere_count_label`` class " +"variable. Next, we get ``Game.gd`` by using ``get_tree().root`` and assign " +"``sphere_ui`` to this script." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1363 +msgid "" +"In ``update_ui`` we change the sphere :ref:`Label `'s text. If " +"there is at least one sphere remaining, we change the text to show how many " +"sphere's are still left in the world. If there is not any more spheres left " +"remaining, we change the text and congratulate the player." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1367 +msgid "Adding the final special RigidBody" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1369 +msgid "" +"Finally, before we finish this tutorial, let's add a way to reset the game " +"while in VR." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1371 +msgid "" +"Open up ``Reset_Box.tscn``, which you will find in ``Scenes``. Select the " +"``Reset_Box`` :ref:`RigidBody ` node and make a new script " +"called ``Reset_Box.gd``. Add the following code to ``Reset_Box.gd``:" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1410 +msgid "Let's go over what this does quickly, as it is also fairly simple." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1412 +msgid "" +"First, we get the starting global :ref:`Transform ` in " +"``_ready``, and assign it to ``start_transform``. We will use this to reset " +"the position of the reset box ever so often." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1414 +msgid "" +"In ``_physics_process`` we check to see if enough time has passed to reset. " +"If it has, we reset the box's :ref:`Transform ` and then " +"reset the timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1416 +msgid "" +"If the player interacts while holding the reset box, we reset the scene by " +"calling ``get_tree().change_scene`` and passing in the path to the current " +"scene. This resets/restarts the scene completely." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1419 +msgid "" +"When the reset box is dropped, we reset the :ref:`Transform " +"` and timer." +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1423 +msgid "" +"With that done, when you grab and interact with the reset box, the entire " +"scene will reset/restart and you can destroy all of the targets again!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1430 +msgid "Phew! That was a lot of work. Now you have a fairly simple VR project!" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1434 +msgid "" +"You can download the finished project for this part here: :download:" +"`VR_Starter_Tutorial_Complete.zip `" +msgstr "" + +#: ../../docs/tutorials/vr/vr_starter_tutorial.rst:1436 +msgid "" +"This hopefully will serve as a introduction into making fully featured VR " +"games in Godot! The code written here can be expanded to make puzzle games, " +"action games, story based games, and more!" +msgstr "" + #: ../../docs/tutorials/plugins/index.rst:2 msgid "Plugins" msgstr "" @@ -50084,7 +52326,7 @@ msgid "Compiling with Mono" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:11 -msgid "Mono (the required version is listed here: :ref:`doc_c_sharp`)" +msgid "Mono 5.12.0 or greater" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:12 @@ -50129,9 +52371,10 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:30 msgid "" -"The glue sources are the wrapper functions that will be called by the " -"managed side. In order to generate them, first, you must build Godot with " -"the options ``tools=yes`` and ``mono_glue=no``:" +"The glue sources are the wrapper functions that will be called by managed " +"methods. These source files must be generated before building your final " +"binaries. In order to generate them, first, you must build a temporary Godot " +"binary with the options ``tools=yes`` and ``mono_glue=no``:" msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:36 @@ -50162,17 +52405,18 @@ msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:48 msgid "" -"**Do not** build normal binaries with ``mono_glue=no``. This option disables " -"C# scripting and therefore must only be used for the temporary binary that " -"will be used to generate the glue. Godot should print a message at startup " -"warning you about this." +"**Do not** build your final binaries with ``mono_glue=no``. This disables C# " +"scripting. This option must be used only for the temporary binary that will " +"generate the glue. Godot will print a warning at startup if it was built " +"without the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:49 msgid "" -"The glue sources must be regenerated every time the ClassDB API changes. If " -"there is an API mismatch with the generated glue, Godot will print an error " -"at startup." +"The glue sources must be regenerated every time the ClassDB bindings " +"changes. That is, for example, when a new method is added to ClassDB or one " +"of the parameter of such a method changes. Godot will print an error at " +"startup if there is an API mismatch between ClassDB and the glue sources." msgstr "" #: ../../docs/development/compiling/compiling_with_mono.rst:55 @@ -50190,6 +52434,58 @@ msgid "" "the mono runtime shared library to the ``bin`` subdirectory." msgstr "" +#: ../../docs/development/compiling/compiling_with_mono.rst:89 +msgid "Command-line options" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:91 +msgid "" +"The following is the list of command-line options available when building " +"with the mono module:" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +msgid "" +"**module_mono_enabled**: Build Godot with the mono module enabled (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:94 +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "default: no" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "" +"**mono_glue**: Whether to include the glue source files in the build and " +"define `MONO_GLUE_DISABLED` as a preprocessor macro (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:97 +msgid "default: yes" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:100 +msgid "" +"**xbuild_fallback**: Whether to fallback to xbuild if MSBuild is not " +"available (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:103 +msgid "**mono_static**: Whether to link the mono runtime statically (yes|no)" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:105 +msgid "" +"**mono_assemblies_output_dir**: Path to the directory where all the managed " +"assemblies will be copied to. The '#' token indicates de top of the source " +"directory, the directory in which SConstruct is located" +msgstr "" + +#: ../../docs/development/compiling/compiling_with_mono.rst:106 +msgid "default: #bin" +msgstr "" + #: ../../docs/development/compiling/packaging_godot.rst:4 msgid "Packaging Godot" msgstr "" @@ -52750,7 +55046,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:66 msgid "" -"The scene tree is made up of ... nodes! The heading of each node consists of " +"The scene tree is made up of... nodes! The heading of each node consists of " "it's name, parent and (most of the time) a type. For example :code:`[node " "type=\"Camera\" name=\"PlayerCamera\" parent=\"Player/Head\"]`" msgstr "" @@ -52810,15 +55106,11 @@ msgid "" "animation track use :code:`NodePath()` points to animated attribute in node." msgstr "" -#: ../../docs/development/file_formats/tscn.rst:154 -msgid "Skeleton" -msgstr "" - #: ../../docs/development/file_formats/tscn.rst:155 msgid "" "Skeleton node inherits Spatial node, besides that it may have a list of " "bones described in key, value pair in the format :code:`bones/Id/" -"Attribute=Value`, attributes of bone consisits of" +"Attribute=Value`, attributes of bone consists of" msgstr "" #: ../../docs/development/file_formats/tscn.rst:159 @@ -52949,7 +55241,7 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:275 msgid "" -"Godot alway generates absolute paths relative to the resource directory and " +"Godot always generates absolute paths relative to the resource directory and " "thus prefixed with :code:`res://`, but paths relative to the TSCN file's " "location are also valid." msgstr "" @@ -53023,19 +55315,19 @@ msgid "" msgstr "" #: ../../docs/development/file_formats/tscn.rst:328 -msgid ":code:`arrays` as name suggestes is an array of array, it contains:" +msgid ":code:`arrays` as the name suggests is an array of array, it contains:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:330 -msgid "a array of vertex position" +msgid "An array of vertex position" msgstr "" #: ../../docs/development/file_formats/tscn.rst:331 -msgid "tagents array" +msgid "Tangents array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:332 -msgid "vertex color array" +msgid "Vertex color array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:333 @@ -53047,15 +55339,15 @@ msgid "UV array 2" msgstr "" #: ../../docs/development/file_formats/tscn.rst:335 -msgid "bone index array" +msgid "Bone index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:336 -msgid "bone weight array" +msgid "Bone weight array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:337 -msgid "vertex index array" +msgid "Vertex index array" msgstr "" #: ../../docs/development/file_formats/tscn.rst:339 @@ -53092,8 +55384,8 @@ msgstr "" #: ../../docs/development/file_formats/tscn.rst:375 msgid "" -"Each track is described by a list of key, value pairt in the format :code:" -"`tracks/Id/Attribute`, it includs:" +"Each track is described by a list of (key, value) pairs in the format :code:" +"`tracks/Id/Attribute`, it includes:" msgstr "" #: ../../docs/development/file_formats/tscn.rst:378 @@ -53174,7 +55466,7 @@ msgstr "" msgid "" "A transform track use every 12 real number in the :code:`keys` to describte " "a keyframe. The first number is the timestamp, the second number is the " -"transision (default 1.0 in transform track), followed by a three number " +"transition (default 1.0 in transform track), followed by a three number " "translation vector, followed by four number rotation quaternion (x,y,z,w) " "and finally a three number scale vector." msgstr "" @@ -53517,10 +55809,13 @@ msgid "" msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:33 +#, fuzzy msgid "" -"If you are contributing to the documention, its repository can be found " +"If you are contributing to the documentation, its repository can be found " "`here `_." msgstr "" +"在這份文件之外,你可能也會想看看 `Godot 的 demo 專案 `_。" #: ../../docs/community/contributing/pr_workflow.rst:36 msgid ""